欢迎交流。
回复内容:
主要是提高了代码的抽象级别。相对于简单的,直接暴露底层概念的 PHP 语言,Symfony 提供了一套解决特定工程问题的概念和工具,帮助广大的 Coder 的减少重复性工作。抽象化意味着能用更简洁的东西表达复杂的概念,流程等。Symfony 已经写了一年多了,对我来说的好处,是让我明白了“有各种各样的方式来简练代码”,“简练的代码的诸多好处“,以及”到底简练了什么东西“。
Symfony 一些介绍:
- 路由:能限制 hostname,这就让有大量公共功能的网站可以共用一套代码;URI 识别支持 Reg 检测,让 url 能定义的随心所欲;支持前缀,import,便于模块化。
- Twig模板:这是我最喜欢的一个组件。它提供了一套不同于 php,但非常适合处理复杂网站结构,页面结构的语法。extension 很方便也很强大,通用的操作通过 extension 能很好的表达,比如需要缓存页面的某个模块到 redis ,写一个 ViewExtension,就能在模板里面用一个方法来缓存特定模块了,非常方便,代码也很容易管理。
- composer包管理:让代码的依赖关系变得很清晰。而且现在第三方有很多不错的 bundle,比如抽象 redis 的 snc/redis-bundle,处理图片的 liip/imagine-bundle,第三方登录的 hwi/oauth-bundle 等等等等。随着自己项目的逐渐成熟,也可以把项目对 Symfony 的定制独立出来用 composer 来管理,感觉挺不错的。
- Event,Listener 和 Services:非常方便的全局功能处理。惹人讨厌的是配置起来很麻烦,我用的是 yml 配置文件,为了找对路的语法真是掉了一层皮。
- Doctrine ORM:一个好处是不用去纠结于数据库的细节,而只需仔细的设计需要持久化的对象。对象之间的关系可以自由设计,从生成数据库结构到生成查询语句的过程都不用再操心了。另一个好处是查询的时候,可以不用 sql,dql 这种依赖字符串来表达的查询,而采用对象式,sql 因为是单纯的字符串,整个查询逻辑的控制用代码表达起来很麻烦。
- Form组件:Symfony 提供了 form 生成,提交以及验证的功能。组件抽象了三个方面的东西:formType 来维护需要填写保存的值,formTheme 来定义表单的 html 结构,以及 validation 提供数据验证的功能。这个组件的缺点也很明显,概念太复杂了,如果遇到要自己定义一个 field,简直就是自找麻烦。
- 性能:Symfony 提供了一个极好的组件叫 profile,能以图形化的形式显示各个部分代码执行的时间,消耗的内存,还有数据库查询的语句,查询的行数,用到的索引的。配合这个工具来优化代码,可以让网站跑得飞快。
性能不是问题,优化的空间非常大,但你至少的是常读源代码的这个级别才能让它的性能上得了台面。学习成本高也是个问题,类似于学习 vim 的感觉,熟悉起来非常美好,不然的话...
资料:
- Symfony2 - 标签
但是laravel 有两点不同,第一个语言优美,第二个out of box,它是以用户为中心的,偏向黑盒,比较像苹果的风格,就像苹果手机;
symfony2 偏向白盒,架构清晰灵活,但是非常复杂繁琐~~你需要自己做很多轮子,好处就是轮子都可以很轻松调试,有点像windows的企业版。
symfony2 是非常值得学习的框架,如果你玩了一段时间laravel,需要对内核架构更加深入理解,可以看看symfony2,laravel很多核心概念就是从那里来的。
但是有些设计思想上,symfony反而感觉没有laravel奔放,比如说表单,,symfony搞了一套自以为是非常完整的表单系统,MVC全部打包了。 laravel的表单就很灵活,全部拆分了,甚至后来放弃了V的部分~~普通程序员第一次看到symfony的表单系统常常会吐血身亡。
还有annotation,总感觉是旁门左道,,不正规,现在也没感觉到它的好处,可能是还没用习惯吧。 刚用symfony2做完了三个项目
其中一个使用了sylius bundle,之前使用过codeignitor, yii, zend, drupal, joomla, wordpress做过几十个项目,自从用了symfony2之后,再也不想回到之前的框架里面了,当然drupal8集成了symfony2核心的bundle,一直等待着快快发布。使用symfony2之后让我重新找到了写代码的乐趣,精简,快速,优美,当然有个问题就像上面的一个哥们说的一样,完全对数据库进行了抽象,都需要接触phpmyadmin了,通过doctrine可以自动同步数据库,当然带来的问题是性能方面的问题,无法针对性的进行优化。但是symfony2提供的cache完全可以让网站飞快的运转起来,比起性能更加重要的是能够作出自己想要的东西,性能是之后可以慢慢调试优化的。
另外还有一个对我们来说的一个不是太大的缺点:中文资料相对有限。但是相信通过我们这些点滴的讨论会让资料不断的丰富起来。在做上面的几个项目的时候基本上是在英文社区里面得到的支持。
还有一个问题是,里面的一些概念理解起来比其他的框架稍微有些难度,比如events,services,security,依赖注入,当然这也是强大的背后要付出的一些代价。 优点是强大,缺点是太强大。。。
原来1.0性能不行,据说2.0性能提高很多,可以试试。 优点:像java
缺点:像java 缺点就是太重,学习曲线太陡峭,性能真行不高,中文资料太少,主要的以法文为主,英文其次。另外由于年头早,语法相对陈旧(这就是为啥说laravel好的原因,年头新,用了很多新技术)。
优点就是现成的组件足够多,海量而且开源,重用模式设计的比较精巧,功能足够全面。
第三方bundle的问题是,每个bundle的学习成本也并不低。虽然开源,但实际上比较难改动。而且由于历史原因,很多bundle都有兼容问题。
我现在主要是用sonata系列的组件用于快速建立admin管理平台使用,这部分用熟悉了,能让后台开发效率达到极致,暂时没有发现能够让开发速度更快的可能。需要性能的接口部分使用另一个框架phalcon来处理。 优点:
学会以后强大异常,基本我现在web项目都用 sf2.
缺点:
学习难度存在,三两个项目实战下来才熟悉当中常用组件。
如果学习sf2,官网的Best Practice一定要看,框架自带的实现方式未必最好,比如前端构建我还是喜欢用grunt,AsseticBundle基本不用 没用过sf2, 刚看他的文档,如果用过springMvc 就理解容易看的懂了 优点:
full stack freamwork, powerfully code-generation tools!! based on the premise of convention over configuration.
就我自己的经验来说, Symfony在项目开发上的方便性, 敏捷性和可扩展性, 目前在PHP Freamwork里数一数二, 再加上其强大的第三方插件库和活跃的社区.
缺点:
学习曲线. 要完全搞懂Symfony的设计, 至少花一星期时间研究手册和代码
性能. Symfony1.4和Doctrine1.2结合使用, 高并发下的性能是个问题. 虽然在Symfony2和Doctrine2下已经得到很大的解决.... 但那是另一个话题了.... =_=
PHP最好的框架就是Symfony,很多phper不会用,因为缺少必要的大型web开发的基础知识,比如很多phper连什么是service,event,DI都不知道

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP在現代化進程中仍然重要,因為它支持大量網站和應用,並通過框架適應開發需求。 1.PHP7提升了性能並引入了新功能。 2.現代框架如Laravel、Symfony和CodeIgniter簡化開發,提高代碼質量。 3.性能優化和最佳實踐進一步提升應用效率。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP中使用clone關鍵字創建對象副本,並通過\_\_clone魔法方法定制克隆行為。 1.使用clone關鍵字進行淺拷貝,克隆對象的屬性但不克隆對象屬性內的對象。 2.通過\_\_clone方法可以深拷貝嵌套對象,避免淺拷貝問題。 3.注意避免克隆中的循環引用和性能問題,優化克隆操作以提高效率。

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver CS6
視覺化網頁開發工具

WebStorm Mac版
好用的JavaScript開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

記事本++7.3.1
好用且免費的程式碼編輯器