但这也正是PHP一个先天的重大劣势,没有一个别系的成脉络的设计体系。
PHP出生时便是一个单一的知足业务的措辞,并没有像JAVA一样有很系统设计体系和原则。
在JAVA有三个最根本的设计原则:1,不支持全局变量。
2,不写万能类。
3,代码必须是类封装。

JAVA的第一个,第三个原则是在语法上就限定了,第二个原则是评判一个JAVA程序员是否入门的标准。
PHP相对来说就没什么这样的语法上的设计原则限定,可打仗了一些大公司,真没有体系原则呀,哎。

但在我们设计思想里可不能真的没有原则呀!

php广州干货PHP代码规范 React

PHP程序实在是怎么方便怎么来,阐明器很强大,可以屏蔽原谅各种思路的程序代码,只要语法OK,不在乎代码设计。
正因早期的PHP太随意了,入门很随意马虎,不用很好的对代码进行有效的管理和方便的复用。
随着PHP的发展,PHP已经告别在PHP3~PHP4时期动态标记措辞,但由于向上兼容原则,PHP还是一个语法宽松的措辞,系统化的程序设计原则还没有逼迫融入到措辞核心中来。

这样并不代表我们不须要利用成熟的设计思想来完善和编写我们的程序代码。
JAVA的程序设计事理和代码积累,是JAVA的精髓,随着韶光的积累加倍明显。
将JAVA的程序设计思想,引入到PHP的编程过程中来。
是一个完善PHP代码的很好的方法。

1. 代码分级封装

2. 文件灵巧调用加载,资源随用随创建

3. 平整抗老化的目录构造

办理这些能为程序编写过程,带来非常多的益处。

如何办理呢?

可以通过对付MVC设计思想进行的拆解封装,来实现清晰,有效,同等性的程序设计思想。

一个程序从逻辑构造上可看做是模型(Model),视图(View)和掌握Controller)三个逻辑块。

在JAVA中Model层实现系统中的业务逻辑,常日可以用JavaBean或EJB来实现。
View层用于与用户的交互,常日用JSP来实现。
Controller层是Model与View之间沟通的桥梁,常日是router servlet向运用真个扩展。

可 PHP 没有这样清晰的划分,以是须要将设计思想揉入到程序代码中去。

1、程序代码类封装

对付一个运用需求(ex: similar相似商品页),将需求先分为3个文件:similar.controller.php;similar.model.php.similar.view.php

通过名字我们也可以看出各文件中的代码用场,剩下便是要给各个文件中的类进行命名。

由于是这对一个运用的不同操作类,以是须要给各个类加不同的类目后缀,

例如similar.controller.php

//controller 掌握程序类 完成此类中的方法是程序各页面流程,每一个方法对应一个同步要求页面(以合营页面的调用规则)

class similar{

//相似商品页的展现

functio do_opensearch($_param){

//要求参数过滤

//要求商品数据

//根据呈现规则处理商品数据

//渲染商品数据获掏出现html

//展示呈现html

}

}

对应的要求便是

http://s.etao.com/similar/opensearch/

similar.model.php

//model 数据操作程序类 完成对此运用的数据要求封装,返回结果的构造解析处理

class similarMODEL{

}

similar.view.php

//model 呈现操作程序类 完成对此运用的数据呈现封装,返回给已经处理好的

class similarVIEW{

function view_getDetail($_goodDataArr){

return $html;

}

}

7.当实行变量$i的递增或递减时,$i++会比++$i慢一些。
这种差异是PHP特有的,并不适用于其他措辞,++$i更快是由于它只须要3条指令(opcodes),$i++则须要4条指令。
后置递增实际上会产生一个临时变量,这个临时变量随后被递增。
而前置递增直接在原值上递增。

8.利用选择分支语句(switch case)好于利用多个if,else if语句。

9.利用var_dump进行PHP代码调试。
如果你在探求php调试技能,我必须说var_dump该当是你要找的目标,在显示php信息方面这个命令可以知足你的所有须要,而调试代码的多数情形与得到PHP中的数值有关。

10.在包含文件时利用完全路径,解析操作系统路径所需的韶光会更少。

11.动辄创建全局数值是一种糟糕的做法,不过有时候实际情形的确又须要这么做。
对付数据库表或数据库连接信息利用全局数值是一个不错的想法,但不要在你的PHP代码中频繁利用全局数值。
其余,更好的一种做法是把你的全局变量存放在一个config.php文件中。

12.如果你想知道脚本开始实行的时候,利用$_SERVER[‘REQUEST_TIME']要好于time()。

13.打开apache的mod_deflate模块。

14.用@屏蔽缺点的做法非常低效。

15.只管即便采取大量的PHP内置函数。

16.递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。

17.派生类中的方法运行起来要快于在基类中定义的同样的方法。

18.仅定义一个局部变量而没在函数中调用它,同样会减慢速率(其程度相称于递增一个局部变量)

19.Apache解析一个PHP脚本的韶光要比解析一个静态HTML页面慢2至10倍。
只管即便多用静态HTML页面,少用脚本。

20.正如之条件到的,任何php网站中最主要的部分有99%的可能是数据库。
因此,你须要非常熟习如何精确的利用sql,学会关联表和更多高等的数据库技能。

除此之外,

开源天下里有很多不错的发布代码工具,比如 ruby 社区的 capistrano,其流程大致便是发布代码到一个全新的目录,然后再软链接到真正的发布目录。

.

不过鉴于 PHP 本身的分外性,如果只是大略套用上面的流程,那么将很难实现真正的原子发布。
要理清个中缘由,还须要理解一下 PHP 中的两个 Cache 的观点:

opcode cache

realpath cache

先聊聊 opcode cache,基本便是 apc 或者 zend opcode,关于它的浸染,大家都已经很熟习,不必多言,须要把稳的是 apc 的 bug 很多,比如开启了 apc.enable_cli 配置后就会有很多灵异问题,以是说 opcode cache 还是尽可能利用 zend opcache 吧,如果须要缓存数据,可以用apcu。
此外 apc 和 zend opcode 对缓存键的选择有所差异:apc 选择的是文件的 inode,zend opcode 选择的是文件的 path。

再聊聊 realpath cache,它的浸染是缓冲获取文件信息的 IO 操作,大多数时候它对我们而言是透明的,以至于很多人都不知道它的存在,须要把稳的是 realpath cache 是进程级别的,也便是说,每一个 php-fpm 进程都有自己独立的 realpath cache。

假设在发布代码期间,opcode cache 或者 realpath cache 里的数据涌现过期,那么就会涌现一部分缓存是旧文件,一部分缓存是新文件的非原子发布的情形,为了避免涌现这种情形,我们该当担保缓存过期韶光足够长,最 好是除非我们手动刷新,否则永久不过期,对应到配置上便是:关闭 apc.stat、opcache.validate_timestamps 配置,设置足够大的realpath_cache_size、realpath_cache_ttl 配置,必要的监控总是有好处的。

干系的技能细节特殊噜苏,建议大家仔细阅读如下资料:

realpath_cache

PHP’s OPCache extension review

Atomic deploys at Etsy

Cache invalidation for scripts in symlinked folders