看了laravel的php框架怎么感觉很不靠谱?
听说laravel挺火,就用看了一下,没有深入去看,算是只看完快速入门,看了以 后有点失去兴趣了,特来知乎请教一下。如果这东西都是用composer的方式调入各种第三方的包来完成任务,那么灵活性是不是太低了一点,虽然没有重复 造轮子,但是最后大家弄出来都是一样的轮子,还有安全性好保证么,听说效率也不高啊。如果不使用第三方包的情况下,能加快多少开发速度呢?会不会反倒不如 其他的框架?
追加:有些回答觉得我对laravel不够深入所以评价不客观,ok,我想这也是有可能的,虽然第一感官不好了,但为了不武断作出结论,我决定继续深入下去,如果不好,到时候再回来反驳你们,哼哼,=P。
追加:有些回答觉得我对laravel不够深入所以评价不客观,ok,我想这也是有可能的,虽然第一感官不好了,但为了不武断作出结论,我决定继续深入下去,如果不好,到时候再回来反驳你们,哼哼,=P。
1 条评论
默认排序
按时间排序
30 个回答
子之武城,闻弦歌之声。夫子莞尔而笑,曰:「割鸡焉用牛刀」。 --- 《论语》我们学习一个框架,不是因为他简单易学,而是因为他高效强大。
Laravel 框架的出现,将 PHP 的后端开发带入了一个新的高度,其中的 composer 和 PHP-FIG 等,标志着 PHP 已经不再仅仅是“前端语言”、“展示层语言”了。
PHP 的特点就是易于入门,而且 PHP 是一个语法大杂碎,汇集了 C Perl 等等,当年我学了半天时间,就可以拿来做网站了。
对 于框架,大部分 PHPer 会首选 ThinkPHP 或者 CI。因为这几个框架的门槛和 PHP 的门槛很对口。如果像 Java 那样,学习半年才能做开发,大部分的 PHPer 是接受不了的。如果一个框架(比如 SSH)需要学习半个月才能上手,PHPer 们也接受不了,于是 TP 和 CI 框架大行其道。(PHP 界和 SSH 框架媲美的 ZF 也被 PHPer 鄙视为大而无用,处处透漏这 Java 的臭毛病)
随着 Laravel 的出现,我毫不犹豫的从 CI 转入了 Laravel 阵营。
如果你仅仅是为客户写一个网站,那么即使原生的 PHP 也可以应付,如果想再提高点儿效率,可以选用 TP 或者 CI。
但是,如果你是为公司或者自己开发一个项目,这个项目准备运营五年以上,那么 CI 的弊端就凸现了。五年间,CI 估计都已经升级了 N 版了,PHP 也升级了 N 版了。你升级吗?
项 目是在本地开发调试完成,当上线后遇到问题了,我们如何查找,如何跟踪呢?最通常的办法就是 log。现在几乎每个框架都有 log 功能,但是 Laravel 的又一强大之处就是他的 log 遵循 PHP-FIG,也就是以后你可以随意更换 log 的实现类以提高性能。这就好比我们的 PC,它上面都有 USB 接口,这样我们就可以任意更换 USB 设备,比如 USB 鼠标,USB 键盘,USB 硬盘等。而 Laravel 依据 PHP-FIG 标准提供日志接口,我们只需要更换实现。
那么现在问题来了,<del>挖掘机……</del>,现在很多 PC 支持了 USB 3.0,这时,我们买硬盘的时候就可以买支持 3.0 的,以达到更高的速度。Laravel 使用 composer 管理包依赖。
如果这东西都是用composer的方式调入各种第三方的包来完成任务,那么灵活性是不是太低了一点使用 composer 不是为了调入,而是为了管理,管理包,以及各种包的版本。 这样就解决了各种包的兼容问题。而在 composer 出现之前,PHP 依然没有有效的方法解决这些问题。如果我们需要一个 Excel 的导入导出功能时,就去搜索 PHP 的 Excel 库,大部分情况是去官网下载最新的稳定版本。如果出现问题了,就去谷歌或者百度搜索,“我去~原来是版本问题,这个库使用了匿名函数,PHP 5.3 不支持,哎,只能下载以前的版本了~~”。
Composer 将工程化的思想带入了 PHP。
如果不使用第三方包的情况下,能加快多少开发速度呢?
如果仅仅是开发速度,Laravel 无疑是低效的,笨重的。这显然和“世界上最好的语言”不相搭配。但是如果你开发过大中型项目就会发现,编码(Coding)其实在整个项目阶段,连三分之一都占不到。再退一万步讲,开发周期也许是3个月,但是整个项目的生命周期确实3年啊。
如果你的行程是10公里,那么无疑开车是最快的,如果坐飞机的,估计还没有来得及起飞呢。如果行程是100米呢,走路无疑是最快的。
再说说另一个被 PHPer 忽略的问题,那就是单元测试。同样是 MVC 框架,但是 PHPer 很多是为了 MVC 而 MVC,为了设计模式而设计模式。知其然而不知其所以然。如果问一个 PHPer 为什么使用 MVC,为什么使用模式,估计大部分都答不出来。
今天下午还在 sf 看到一个类似的提问,大意是 ThinkPHP 的模型有什么用,这些代码完全可以写在控制器里面,这样速度还快。诚然,大部分 PHPer 不知道为什么要分层架构,即使使用了框架。
谈到分层,任何一个 java 框架都可以甩 PHP 几条街。(PS:从我的名字可以看出,我是java粉,但我也坚信 PHP 是世界上最好的语言)
现在有一个控制器,处理转账。在这个流程中,需要表单验证、控制器处理业务逻辑、持久化(存储到数据库)、渲染视图,还有一些安全处理、日志功能等。
在传统的 PHP 开发过程中,都是:编码,运行,调试改错,直到运行成功,然后打开浏览器,输入数据,点击执行,看结果,如果正确,再次输入数据,如果错误,修改,调试,再打开浏览器,重复,重复,知道自己满意为止。
我 们也可以使用 PHPUnit,我们把转账功能写到一个(几个)单独的类里面,测试转账的核心功能。但是我们要想测试控制器,模型,则还需要一些黑魔法。如果在 SSH 中,就 So Easy 了,任何一个模块都可以单独拿出来进行单元测试。因为任何一个模块,都可以脱离 SSH 框架而单独运行。
在 SSH 中,我们可以把控制器拿出来,放到 JUnit 中测试控制器的功能。我们也可以把路由器模块拿出来,测试 URL 路由是否正确。等等。而在 PHP 的 CI 或者 TP 框架中,控制器不可能单独拿出来进行测试。
而 Laravel 对于 PHP 的工程化的另一个贡献就是——可测试性。
额。。。额。。。额。。。
PHP好不容易有了composer,你居然说这货没用?框架的更多目的是为了项目的可持续性,而不是能有多快的去开发一个项目。。
在这个什么都要迭代更新的年代,没有可持续的架构,就是废的。
你的系统如果有上百个功能,每个功能之间还有一定的依赖,除了包管理,还有什么好的方式,让几百个人的团队来有序开发?
PHP好不容易有了composer,你居然说这货没用?框架的更多目的是为了项目的可持续性,而不是能有多快的去开发一个项目。。
在这个什么都要迭代更新的年代,没有可持续的架构,就是废的。
你的系统如果有上百个功能,每个功能之间还有一定的依赖,除了包管理,还有什么好的方式,让几百个人的团队来有序开发?
感觉你的需求和能力与Laravel提供的价值并不在一个位面上
Laravel的设计思想是很先进的,非常适合应用各种开发模式TDD, DDD和BDD,作为一个框架,它为你准备好了一切~~composer简直就是个php的未来,没有composer,PHP肯定要走向没落~~
对于新手来说,上手度不是很高,特别是新推出的Laravel 5, 但是学习价值非常高~~你想知道php行业里面的最新编程思维,学Laravel吧LaraBase——全栈工程师之家
对于新手来说,上手度不是很高,特别是新推出的Laravel 5, 但是学习价值非常高~~你想知道php行业里面的最新编程思维,学Laravel吧LaraBase——全栈工程师之家
谢邀。
曾经我自以为智商高过常人,追求纸面上的博闻广识,用道听途说的方式了解事物,凭借仿佛满载着个人天赋的“感觉”给各种东西下判断。把自己的判断说给别人听,经常还获得赞同。这更加增强了我的自信。
直到有一天我发现,这将使我无法真正欣赏宇宙中的任何一种美。任何一种。
后来不再为寻求他人赞同而选择技术方案,发现自己能说的话少了很多,写代码却越来越变成一件乐事。
(抱歉你的提问让人没法回答,只好说点废话)
曾经我自以为智商高过常人,追求纸面上的博闻广识,用道听途说的方式了解事物,凭借仿佛满载着个人天赋的“感觉”给各种东西下判断。把自己的判断说给别人听,经常还获得赞同。这更加增强了我的自信。
直到有一天我发现,这将使我无法真正欣赏宇宙中的任何一种美。任何一种。
后来不再为寻求他人赞同而选择技术方案,发现自己能说的话少了很多,写代码却越来越变成一件乐事。
(抱歉你的提问让人没法回答,只好说点废话)
我观察到一个现象:通常觉得Laravel难学且无用的开发者中,只会PHP一门语言,或者说,没有静态编译型语言(如C/C++/Java/Go等)使用经验的开发者占绝大多数。
组件化是现在开发的趋势。举个简单的例子,如果现在有两部手机,一部手机是像TP一样提供很多常用的开发工具,就像现在我们常见的手机一样。另一部手机像
laravel+composer一样,可自由更换组件,觉得cpu性能不好,掰开手机后盖壳像换内存卡一样就把cpu给换了。屏幕碎了,可以很简单的掰
开屏幕然后换上一个新的屏幕。如果是你,你会更喜欢哪款手机呢?
首先,我个人挺喜欢laravel的。但是,我觉得没必要神话 laravel。
慢慢更……嗯。
/**********************************************************************************/
composer
只是为了方便你不用重复造轮子,其本身其实和laravel 一点儿关系也没有。
laravel只是可以用 composer 而已。 没有 laravel 你也可以用 composer ,
比如 CI3.0就支持 composer , 甚至你不用框架 也可以用 composer 。
composer的特性 和 laravel的特性 没关系……
composer 和 laravel 并不会 妨碍 你的项目代码的 自由度。
难道,当核心业务、核心数据相关的组件出现BUG的时候,
你还非要等 composer 更新版本以后 才能修正BUG吗?
当然不是的……
难道 laravel里,你就不能写 include 来引入文件, new一个对象了吗?
当然也不是的……
框架的存在,并没有缩小你写代码的自由度。
而只是提供给你了一个规范:
按照这个规范写,就可以享受这个规范带来的好处,
而自然也必然的会受到规范的约束,承受规范的坏处。
/**********************************************************************************/
重复造轮子这个事情,并不是完全无意义的
——哪怕是在工作项目中。
很多时候,可以找到的轮子是不合用的,
这种情况下就必然的需要改造轮子,乃至重做轮子。
这是很正常的事情,没必要惧怕重复造轮子。
当然、一定要评估使用旧轮子、改造旧轮子、重做新轮子之间的利弊,
权衡利弊之后再做出决定。
/************************************************************************************/
像 @justjavac 说的 LARAVEL的单元测试概念,确实是很好的。
这个确实是LARAVEL非常吸引人的地方!!!
不过如果说因为laravel支持 PHP-FIG 或者 JUnit ,我们就要支持它。
确实还是要针对不同的项目来看的……
选择自己的项目合适的框架,比起死忠一个框架 更有意义。
至于大项目……
现在存在多少 持续5年以上,单一系统维护人员超过100人的PHP项目 ?
我想并不是很多吧?
我接触到的单一系统很大的项目非常少见,
更多的还是N个小型的子系统共存的项目。
而这样的项目 如果刨除单元测试等优势……
LARAVEL有多少优势吗?感觉并不是太明显……
[当然,也可能是我没有接触过足够多的“大中型项目”的原因^_^]
/*****************************************************************************************/
LARAVEL 和 CI 给我的感觉:
CI3.0 像一个工具箱。我可以很方便的从中找出需要的工具,进行使用。通过工具箱里的工具,我也可以加工出很多方便的小工具来用。
LARAVEL 像一个车床。车床可以制造的工具和制造工具的速度,并非是工具箱可以比拟的。但是想要车床制造出工具箱里的工具来,需要下的力气也不是工具箱可以比拟的。
慢慢更……嗯。
/**********************************************************************************/
composer
只是为了方便你不用重复造轮子,其本身其实和laravel 一点儿关系也没有。
laravel只是可以用 composer 而已。 没有 laravel 你也可以用 composer ,
比如 CI3.0就支持 composer , 甚至你不用框架 也可以用 composer 。
composer的特性 和 laravel的特性 没关系……
composer 和 laravel 并不会 妨碍 你的项目代码的 自由度。
难道,当核心业务、核心数据相关的组件出现BUG的时候,
你还非要等 composer 更新版本以后 才能修正BUG吗?
当然不是的……
难道 laravel里,你就不能写 include 来引入文件, new一个对象了吗?
当然也不是的……
框架的存在,并没有缩小你写代码的自由度。
而只是提供给你了一个规范:
按照这个规范写,就可以享受这个规范带来的好处,
而自然也必然的会受到规范的约束,承受规范的坏处。
/**********************************************************************************/
重复造轮子这个事情,并不是完全无意义的
——哪怕是在工作项目中。
很多时候,可以找到的轮子是不合用的,
这种情况下就必然的需要改造轮子,乃至重做轮子。
这是很正常的事情,没必要惧怕重复造轮子。
当然、一定要评估使用旧轮子、改造旧轮子、重做新轮子之间的利弊,
权衡利弊之后再做出决定。
/************************************************************************************/
像 @justjavac 说的 LARAVEL的单元测试概念,确实是很好的。
这个确实是LARAVEL非常吸引人的地方!!!
不过如果说因为laravel支持 PHP-FIG 或者 JUnit ,我们就要支持它。
确实还是要针对不同的项目来看的……
选择自己的项目合适的框架,比起死忠一个框架 更有意义。
至于大项目……
现在存在多少 持续5年以上,单一系统维护人员超过100人的PHP项目 ?
我想并不是很多吧?
我接触到的单一系统很大的项目非常少见,
更多的还是N个小型的子系统共存的项目。
而这样的项目 如果刨除单元测试等优势……
LARAVEL有多少优势吗?感觉并不是太明显……
[当然,也可能是我没有接触过足够多的“大中型项目”的原因^_^]
/*****************************************************************************************/
LARAVEL 和 CI 给我的感觉:
CI3.0 像一个工具箱。我可以很方便的从中找出需要的工具,进行使用。通过工具箱里的工具,我也可以加工出很多方便的小工具来用。
LARAVEL 像一个车床。车床可以制造的工具和制造工具的速度,并非是工具箱可以比拟的。但是想要车床制造出工具箱里的工具来,需要下的力气也不是工具箱可以比拟的。
匿名用户
其实很多事情并不复杂,怕的是复杂的理论内容。很多东西一旦想通也就那么回事儿。很多人觉得 laravel
这不好那不好、这里难哪里难,我只能说,laravel
的确不是一流和优秀的框架。laravel最大的特点和优秀之处就是集合了php比较新的特性,以及各种各样的设计模式,Ioc容器,依赖注入,等等。因
此laravel是一个适合学习的框架,他和其他的框架思想有着极大的不同,这也要求你非常熟练php,基础扎实。如果你觉得laravel很困难
那么原因只有一个 你php基础不够好。
另外,善于利用命名空间和面向对象的诸多特性,去追寻一些东西,你会发现,原来这一切这么容易。
另外,善于利用命名空间和面向对象的诸多特性,去追寻一些东西,你会发现,原来这一切这么容易。
任何事物存在都有其存在的理由,不能一棒子打死,应该取其长 补其短
看了路由和orm部分,和前端backbone之类的结合应该很契合,还是很不错的,另外composer是个很好东西,关于效率问题,web程序的运行效率从来就不在框架,而在数据库,框架那一点点消耗根本不会是什么负担。
补 充一下,之前说框架的消耗忽略不计也是不完全正确的,有个奇葩的,从前用drupal二次开发的时候一个简单的列表页面竟然单线程消耗20多M内存,原因 就是drupal本身的配置太复杂了(不是我的配置复杂,而是系统本身复杂),为了内容配置的最大自由度,什么变量都往页面里塞。去 stackoverflow上问了,得到的回答是drupal里这是正常的。。drupal总的来说也是一个框架,只不过这个框架带着一个cms系统而 已,当然这样的系统对外是必须一系列优化才能用的。。
laravel框架还是蛮不错的,可以说非常全面,配合phpstorm开发还是很开心的。。
分享两套教学视频,自己从http://laracast.com上一个一个拖下来的,无字幕。。
laravel-whats-new 链接: 百度云 请输入提取密码 密码: 6cwy
laravel-fundamentals 链接: 百度云 请输入提取密码 密码: aw2h
还 有一个phpstorm使用经验的分享,如果还用sublime甚至zde的朋友尽快换phpstorm吧,可以说sublime的功能它都有,但还有一 些高级ide才有的功能,另外即使是vim的用户也应该尝试一下,phpstorm有插件也可以模拟vim的操作,并享受其他好处。
how-to-be-awesome-in-phpstorm 链接: 百度云 请输入提取密码 密码: hgga
补 充一下,之前说框架的消耗忽略不计也是不完全正确的,有个奇葩的,从前用drupal二次开发的时候一个简单的列表页面竟然单线程消耗20多M内存,原因 就是drupal本身的配置太复杂了(不是我的配置复杂,而是系统本身复杂),为了内容配置的最大自由度,什么变量都往页面里塞。去 stackoverflow上问了,得到的回答是drupal里这是正常的。。drupal总的来说也是一个框架,只不过这个框架带着一个cms系统而 已,当然这样的系统对外是必须一系列优化才能用的。。
laravel框架还是蛮不错的,可以说非常全面,配合phpstorm开发还是很开心的。。
分享两套教学视频,自己从http://laracast.com上一个一个拖下来的,无字幕。。
laravel-whats-new 链接: 百度云 请输入提取密码 密码: 6cwy
laravel-fundamentals 链接: 百度云 请输入提取密码 密码: aw2h
还 有一个phpstorm使用经验的分享,如果还用sublime甚至zde的朋友尽快换phpstorm吧,可以说sublime的功能它都有,但还有一 些高级ide才有的功能,另外即使是vim的用户也应该尝试一下,phpstorm有插件也可以模拟vim的操作,并享受其他好处。
how-to-be-awesome-in-phpstorm 链接: 百度云 请输入提取密码 密码: hgga
强烈推荐学习laravel,你会发现在学习过程中,你会学习到框架之外的更多知识
1.如何翻墙,因为composer的安装和使用在墙内的速度是令人发指的
2.如何翻译,因为laravel的文档大部分是英文的,比如laravel5.1是6月发布的,直到今天10月19日,完全汉化的文档还是没有。
3.如何撕逼,你要对面用TP的人的不理解,用Yaf的人的鄙视,用Yii的人的试探的目光
4.如何运维,项目上线后,面对性能低下的问题你需要redis memcache opcache php7 hhvm 等等等优化性能的方案
以上!
1.如何翻墙,因为composer的安装和使用在墙内的速度是令人发指的
2.如何翻译,因为laravel的文档大部分是英文的,比如laravel5.1是6月发布的,直到今天10月19日,完全汉化的文档还是没有。
3.如何撕逼,你要对面用TP的人的不理解,用Yaf的人的鄙视,用Yii的人的试探的目光
4.如何运维,项目上线后,面对性能低下的问题你需要redis memcache opcache php7 hhvm 等等等优化性能的方案
以上!
用composer是增强了灵活性,而不是牺牲了灵活性,=。
Abby Chau
分析程序員/C++/PHP/Unity/LOL/日麻
你的疑慮是出在composer 而不是laravel。為顧及到初學者的上手需要,laravel 官方是有提供脫composer 的壓縮包的,而且你所看到在composer 的依存包,通通都可以用自己喜歡的方法和路徑載入。
Composer 是個不錯的工具,他不複雜,而且支持它的套件也很多,如果你打算長年開發一個項目,日後轉用composer 相信會是個自然又必然的選擇。
Composer 是個不錯的工具,他不複雜,而且支持它的套件也很多,如果你打算長年開發一個項目,日後轉用composer 相信會是個自然又必然的選擇。
看起来题主并没有什么使用依赖管理程序的经验,composer 的好处就是在于可以自动解决不同第三方包的依赖关系,并快速部署。
至于灵活性,Laravel 并不是要求一定要使用第三方的软件包,
如果觉得别人开发的灵活性不够完全可以自己来开发满足要求的模块。只是如果有现成的可以用,为什么要自己造轮子呢? (大家用一样的轮子有什么不好)
纯运行速度的确是 Laravel 的弱点。但是相比于其他框架YII, Cake PHP 等[1]。 Laravel 的速度并没有比这些框架慢。 可以说性能上来讲并不处于绝对劣势。通过有效的缓存可以弥补运行速度的不足。
至于开发速度,这个与很多因素有关,成熟的第三方软件包有完整的 unit test 和文档,如果正好能满足需求,则可以大大提高开发速度。只不过个人认为开发速度与你对特定框架的熟练程度关系更大一些。如果为了快速开发,选择你最熟悉的框架即可。
纯运行速度的确是 Laravel 的弱点。但是相比于其他框架YII, Cake PHP 等[1]。 Laravel 的速度并没有比这些框架慢。 可以说性能上来讲并不处于绝对劣势。通过有效的缓存可以弥补运行速度的不足。
至于开发速度,这个与很多因素有关,成熟的第三方软件包有完整的 unit test 和文档,如果正好能满足需求,则可以大大提高开发速度。只不过个人认为开发速度与你对特定框架的熟练程度关系更大一些。如果为了快速开发,选择你最熟悉的框架即可。
前天听人说,一般框架的瓶颈在数据库,laravel的瓶颈就在laravel。我准备自己写个稍微不那么复杂的相同功能的应用分别压测一下symfony,silex,laravel,lumen和yaf。测完如还想的起来就回来更新一下。
个人的小项目当然体现不出来laravel的优点了,做大一点的项目还是挺好的,草根们可能不习欢这个,更喜欢轻量级的...
匿名用户
好好的一个php,慢慢地就变成了java
laravel相对某某框架来说学习成本还是比较高的。对于不了解php新特性,不知道基本的设计模式,不清楚匿名函数是何物的phper来说,刚接触基本就是一头雾水了~不过等你弄清他的一些核心思想后,你会发现你的编程能力有了不少的提升!
你干吗要用框架? 我深深的感到,框架对你来说就是一种折磨! 因为你根本不知道什么是框架