作为一个 php,java,python,golang,c#(
asp.net )都写过的 hello world 工程师,这种文章就是月经贴,挑战或者博眼球吸粉的文章而已。
1 对 ide 不友好?你说的容器获取到的实例无法提示成员的问题,这是由于 php 本身是弱类型的原因,和框架是没有关系的。你去看看 java 的 spring,从容器中 get 出来的 bean 难道不是 object 吗?难道不要强制类型转换吗?况且 php7 出来那么久了,我用的不多,但是我还是知道他是有严格模式而且支持强类型的。至于其他什么 ORM,Facade 无法提示可以照着 5 楼所述。
2.1 讲到这个事情我就总是想起当年 Python,Golang 刚刚火起来的时候,人人都吐槽写 Python 要用游标卡尺,写 Golang 要被迫适应他的代码 format 方式,骂这些语言的作者在编码风格上强奸程序员。这些语言为了让所有风格和不同水平级别的程序员能够写出统一风格的代码,做了很多专制制度,而 PHP 从一开始所倡导的理念就是自由开放,给了程序员们最大的自由。而现在这反倒经常成为 PHP 的黑点。说句不好听的,有些人啊就是贱就是矫情,现在的程序员真难伺候。
2.2 我阅读过 BAT 某大厂的一款 PHP 框架源码,里面也把一些 PHP 中明明有的内置函数做了一层封装,比如说 json_encode,我开始也百思不得其解,直到后来看到 sh 部署脚本中,PHP 版本还是 5.2 我就明白了,框架作者考虑到 PHP 在版本迭代的过程中可能某些扩展和函数会被废弃,因此做了一层封装,而且 PHP 扩展一般都是没有命名空间的,而且大家都知道 PHP 的内置扩展和函数命名都是五花八门的,在一堆面向对象代码中写起来会很不优雅,再次封装一层也是为了让一些东西统一,或者在以后底层函数出现变化之后能够做更少的替换。
3.1 我也不想扯太多,麻烦文章作者去翻一番 Laravel 官方文档看看 Facade 的应用场景和解决的问题是什么再来喷把。作者的逻辑就好比是在冬天穿了一件夏天的衣服,冷得打哆嗦,还不停的骂说这衣服怎么这么破。
3.2 难道 JSP,ASPX 里面不能写逻辑?你喜欢什么模版引擎你自己用 Composer 配一下改一下就 OK 了,强行凑喷点条数我也是服了。
4.1 Symfony 那种注释写法不就和 JAVA 里面的注解很像吗,各有各的好处。我就是喜欢集中式的配置文件。这样的项目如果给别人接手,看一眼路由配置我就大概能从宏观角度知道整个项目的运作和具有的接口了,无论是做路由分组,批量分发中间件( JAVA 里面的拦截器)或者其他什么 URL 前后缀修改也是非常方便的。还是那句话:你喜欢什么路由你自己用 Composer 配一下改一下就 OK 了,强行凑喷点条数我也是服了。
4.2 你说的不就是 Hibernate 里面的注解吗? Laravel 其实是一个很轻量松散的框架,ORM 你用的不爽你可以直接替换掉或者干脆不用,像我我就不喜欢 ORM,我就喜欢查询构造器。好像 Laravel 官方的作者也说过,数据库,项目实体模型关联这些东西,在架构设计的时候就应该要非常谨慎地考虑。如果你做一个开发,数据库还要动不动就大修改,那么我认为你这个项目从一开始设计上就存在很多不合理不优雅的地方,说句不好听的话:你这种设计水平就算用了 Laravel 这种优雅的框架,也还是能把代码写的一团糟。而且 migration 本身就类似于一个数据库 DDL 的表结构版本控制,它记录了你的项目数据库修改日志,如果以后代码或者数据出现问题也可以很方便的回滚,这个优点你怎么不说呢?还是那句话:migration 你爱用不用,Laravel 又没有逼你使用它。
可能有些地方喷的不是很到位,还欢迎大家轻喷和指出我的错误。