首先,你应该使用PHP5.3或以上版本。如果PHP版本低于这个,是时候升级了。如果可能,我建议***使用***版本。你应该阅读PHPTheRightWay,这篇文章包含很多内容,并且可以扩展。您需要了解的大部分名词和概念。1.PSR该小组背后的想法是让项目代表讨论我们项目之间的共性,并找到我们可以合作的方式。我提到了PSR(PHP标准推荐)。很多人认为PSR只是在做一些无关紧要的事情,比如标准化代码风格,但它远不止于此。PSR的一系列标准文档由php-fig(PHPFrameworkInteropGroup)起草和表决。投票成员中有一些主流框架和扩展的作者,包括Laravel、Symfony、Yii等。据其官网介绍,该组织的目的不是告诉你应该做什么,而是与每个人协商并达成一致other介于一些主流框架之间。但我相信你会一直使用这些框架和扩展。目前PSR认可的文档有6个:0:自动加载(主要针对PHP5.3之前没有命名空间的版本)1:编码规范2:编码风格推荐3:记录结果4:自动加载更详细(出现命名空间时7:HTTP消息接口目前正在起草(Draft),还有PSR-5(PHPDocStandard),PSR-6(Cache)等,5和6没有出现在上面的列表中,因为它们还没有被投票相信随着标准的不断更新,你会发现研究这些约定是有好处的,虽然不一定非得什么都得遵守。作为程序员,小组中没有人愿意告诉您如何构建您的应用程序。2.ComposerComposer是PHP中的依赖管理工具。它允许你声明你的项目所依赖的库,它会为你管理(安装/更新)它们。composer不同于Pear和Pecl。它不仅仅用来安装扩展,更重要的是,它定义了一个现代的PHP框架实现和扩展管理方法。类似于node.js的npm和Python的pip,但比上面的功能更多。Composer的核心是实现扩展的标准安装和类的自动加载。通过packagist.org平台可以轻松引入无数的扩展组件,目前比较知名的PHP扩展都可以通过composer安装。而且调用只需要加载一个autoload.php文件即可。Composer通过spl_autoload_register方法注册一个自动加载方法来加载扩展类和文件。当然,composer也在中间做了优化。我们都知道PHP导入文件是通过include和require来实现的,其实不好写。PHP5.3提供了命名空间,它与文件导入无关。但是,composer实现了PSR-4(旧版本PHP中的PSR-0)。使用use时,调用spl_autoload_register实现的方法用于调用时加载需要的类。在写法上类似于Python的import,既美观又有效。达到了按需加载和懒加载的作用。3.php-cs-fixer当您想遵循PSR-1和PSR-2文档中定义的PHP编码标准时,PHP编码标准修复器工具可以修复代码中的大多数问题。这个工具的作用是按照PSR-1和PSR-2的代码格式约定,一些可选的编码风格是Symfony的约定。其实这个也不是那么值得一提,不过最近在几个开源框架中看到了.php_cs文件。好奇了一会,深入挖掘才发现了这个项目。项目地址:https://github.com/FriendsOfPHP/PHP-CS-Fixer在其项目主页上介绍了具体的使用和配置方法。这个组织的名字也很有意思:FriendsOfPHP。主要成员可能来自Symfony项目。可能有人会认为代码风格其实大可不必担心。我不能说任何好处。如果你认为编程不仅仅是一份工作,那么它就像打扫房间一样。房间脏了不影响吃饭睡觉,干净的看起来更舒服。想要与人合作,那这件事就更重要了。4.PsySHA运行时开发人员控制台、交互式调试器和PHP的REPL。PsySH是一个类似于Python的IDLE的PHP交互式运行环境。这是我在Laravel中找到的,通过它实现了Laravel5的artisantinker功能。Laravel4中使用了另一个项目:boris。这个主要是方便在测试php的一些简单的功能和特性的时候使用。遇到一些不确定的事情,比如empty的使用,可以用它来做一些测试。5.一些框架和组件框架我比较喜欢Laravel。目前公司使用的是Yii2。我关心的是Symfony和Phalcon(用C语言实现)。该用什么不该用主要是喜好问题,有时候会由不得自己选择,不过研究一下,了解一下也无妨。提到Laravel,很多人第一时间就会想到RubyonRails。我不认为模仿或抄袭是主要目的。主要目的是为开发者提供更好的工具。幸运的是,Laravel有不同的路由控件(没有Action后缀或前缀)、好用的ORM(Eloquent)、好用的模板引擎(Blade)或具有高价值的文档(如果社区看到的话)等等。强大有时会被批评庞大,但这是因为你需要了解你的项目的中长期规划,项目目前的规模,以及未来的规模和承载能力。Larval的核心实现是一个容器(Container)和PHP的反射类(ReflectionClass)(Yii2也是一样)。要了解这些,多看文章和文档,还要看源代码。Symfony2提供了许多组件。http-kernel和http-foundation也被Laravel直接继承和使用。值得了解和学习。CodeIgniter是一个小巧但功能强大的框架。CI虽然没有使用Composer组件进行开发,但是3.0之后的版本也增加了Composer支持(这无非是多了一个vendor目录,引入了autoload.php)文件。我认为还是需要ORMORM或ActiveRecord。可能有人认为PHP是模板引擎,SQL应该是手写的。不要被这些话所困扰。ActiveRecord在CodeIgniter中的实现是非常轻量级的,但是对于CI本身的体量来说已经非常有用了。非常喜欢Laravel实现的Eloquent,也可以集成到其他项目中。Symfony2使用了Doctrine,这个项目也值得一看。Yii2也有自己的一套实现。模板引擎模板引擎需要做三件事:变量值的输出(echo)、条件判断和循环(if...else、for、foreach、while)导入或继承其他文件Laravel实现的Blade是一个相对轻量级且易于使用的模板引擎。但是目前不太好引入到其他框架中。十一闲来无事,想把它引入到Yii2中,现在只是一个简单的实现。希望能将Blade的解析部分单独抽取出来,做一个轻量级的实现。在Github上搜索发现有人在做同样的事情。Yii2似乎推荐使用原生的PHP来编写,但它也提供了支持Smarty和Twig的扩展。Symfony2使用Twig。Twig和Symfony,还有上面提到的php-cs-fixer,都是SensioLabs的作品。Smarty是一个古老而顽强的模板引擎。说实话,我不是很喜欢它,它的语法太复杂了,变量赋值之类的东西也有自己的一套做法。现在的版本是用Lexer来解析文件,感觉像是用PHP实现了另一种语言。项目中还有一些太长的正则表达式和太复杂的实现。我认为这是一件非常危险和容易出错的事情。
