想要成为PHP高手的十个建议

勇哥对我说,我写的都是道,但是大部分人需要的是术。我恍然大悟,想想这有道理,道理虽然是根本,但是术还是要有的。特别推出一针灵系列,顺手弄个耸动标题吸点粉,请轻喷。

PHP使用简单,上手特别的快,这导致使用者水平参差不齐。而且因为诞生时间太久,有很多冗余的东西,缺点堆堆的,这里不展开。有太多技巧可以提高水平,今天先说十个,有些可能非常颠覆你的想法,但请听听我的看法。

1。熟练使用SPL,这是基础

PHP本身是一门工具,SPL是工具中的工具。SPL的使用会大大简化你的设计,我发现N多程序员无法回答和SPL相关的问题,这是致命的。例如:SplSubject接口可以轻松帮助你做出一个观察者设计模式,SPL系列迭代器满足99%的使用场景,虽然你可能不写自动加载,但是spl_autoload干嘛的总要知道吧。

2。参数需要注入,不要和环境发生依赖关系

你写的代码承载的是你的业务,业务是可以工作在CGI或者CLI下的。看到太多的Sample中控制器会直接使用$_GET,$_POST之类的环境变量,这是致命的。如果你的模型层也有直接获得GPC,恭喜你,重构已经提上议事日程,因为你的业务根本无法再CLI下执行,请把环境变量和业务参数的绑定设计成注入的关系。

3。不用写任何一行注释,熟练运用PHPDoc

代码本身是不用注释的,难道你会在一个user变量中保存一个order讯息么?当然不会,因为他叫user呀,代码本身应该如同说话一般流畅,在写代码的同时最好打开一个词霸。而PHPDoc是你的备注,强化代码对使用者的帮助,让所有的“人”(例如:IDE)明白你的意思,静态代码检测是一切效率的基础。

4。任何模板引擎都是垃圾

这是我的个人观点,为什么要使用另外一种DSL去描述模板呢?除非你能将模板工作交给一个专门团队做,而且用的引擎应该是跨语言的。实际生产环境中,只要有静态页面,和JS的模板引擎足够了,除非你要为SEO做服务。额外说一下,大量的模板引擎把模板和缓存有绑定在一起,灾难加灾难等于毁灭。SO,我从不会面试提问任何Smarty的问题,因为那就是一坨屎。

5。使用PHP编写路由而不是依赖HTTP容器

这个问题和参数注入类似,很多代码中包含的.htaccess其实是很无厘头的,路由也是业务的一部分(除了锁定入口)。我只想问一句话,你的代码难道不想运行在nginx,IIS,lighthttpd上了么?还有很多http容器呢!如果你想把自己的代码商品化,切记把路由放在代码中。而且我想说.htaccess简单的语法,是无法和高级路由器相比的。

6。显示声明变量并且初始化

任何变量使用之前请初始化,如果你是一个合格的程序员。虽然PHP本身会很无厘头的包容你的这些做法,但是这很不职业,尤其extract函数配合GPC使用,导致的后果是致命的,可能覆盖任何关键变量。如果要我配置php.ini,第一个就把extract给disable掉。

7。优秀的代码必须使用Composer

代码是一种服务的载体,所以必须灵活部署,他需要有自己的包依赖管理和autoload管理。千万别在自己写autoload了,我相信你可以,Composer的出现解放了太多PHP程序员。而且请记得千万在本地部署一套本地Composer(Docker做很容易),因为你的CI(持续集成)用得到他。

8。只有视图才会用到Array

这一点很难做到,因为PHP的Array太变态好用。在我的理解中Array只是一具尸体(无法控制读写,无法控制公开程度,没有方法),在业务中所有的值必须以对象的形式传递,这样才能在每一层中做对应的约束等等。只有在视图中才会用到Array,当然前面说了如果没有SEO,也就没有PHP视图,那么其实你的代码中可能就没有Array了。好吧,我的言行有点过激了。

9。不要在代码中随意退出

我想举个例子,你去别人家做客,从大门走进去,走的时候为什么要从窗户跳出去呢?MVC中单一入口进入,其实还有后半句话,要从单一出口退出。如果代码不是你一个人写的,任何程序员无权在自己的辖区内中断代码,因为你根本不知道Runtime时候上下文关系,可能导致OB失效,导致HOOK失效,等等。如果你说这样节约性能,我只想建议别用百度。

10。优秀的PHP程序员必须关注死亡皇后岛订阅号

好吧,这才是这篇文章的目的,只有关注了死亡皇后岛,才能第一时间获得舟哥手写各种语言的心得。谢谢大家,关注之余不要忘记随手转发,万分感谢。

Show Comments