些规则用在自己的项目中,或者继续使用你自己的风格。 通常情况下,你的PHP代码应该遵循其中一项或多项标准,从而其他开发者可以方便地阅读和使用你的代码。这些标准都是在前一个标准 上附加新的规则,所以使用PSR-1就同时要求遵循PSR-0,但可以不遵循PSR-2。
? ? 阅读PSR-1 ? 阅读PSR-2
Language Highlights
编程范式
PHP是一个灵活的动态语言,支持多种编程范式。这些年来一直在不断的进化,重要的里程碑包括PHP 5.0 (2004)增加完善的 面向对象模型、PHP 5.3 (2009)增加匿名函数和命名空间和PHP 5.4 (2012)增加traits.
面向对象编程
PHP具有完整的面向对象编程特性,如类、抽象类、接口、继承、构造函数、克隆和异常等。
? 学习PHP面向对象编程 ?
学习Traits
函数式编程
PHP支持第一类函数(first-class function),即函数可以赋值给变量,包括用户自定义的函数和内置函数,然后动态调用它。 函数可以作为参数传递给
其他函数(即高阶函数),也可以作为函数返回值返回。
PHP支持函数递归调用,即函数自己调用自己,不过在实际的PHP代码中,我们更喜欢用迭代来代替递归。 2009年发布的
PHP 5.3开始引入支持闭包的匿名函数。
PHP 5.4支持把闭包绑定到对象作用域,并改善其可调用性,从而可以在大部分场景中使用匿名函数替代普通函数。
? ? 学习匿名函数
? Read about the Closure class ? More details in the Closures RFC ? Read about Callables
?
元编程
PHP通过反射API和魔术方法机制,支持多种方式的元编程。开发者通过魔术方法,如__get(), __set(), __clone(), __toString(), __invoke()等,可以改变类的行为。Ruby开发者经常说PHP没有method_
missing方法,实际上通过__call()和__callStatic()就可以 完成同样的功能。
? ? 学习反射
命名空间
如前所述,PHP社区的众多开发者已经开发了大量的代码。这意味着一个函数库中的PHP代码可能使用了另外一个库中相同的类名,如果它们共享一个命名空间,则会产生冲突导致异常。
命名空间解决了这个问题。如PHP手册里描述的那样,命名空间类似于操作
系统中的目录,两个同名文件可以共存于不同的目录。同理,同名的PHP
类可以在不同的PHP命名空间下共存,就这么简单。
因而把代码放在自己的命名空间下就显得非常必要,这样其他人就可以放心的使用这些代码,而无需担心与其他函数库的命名冲突。 PSR-0 里提供了命名空间的推荐使用方式, 它试图提供一个标准的文件、类和命名空间的使用惯例,从而让代码做到即插即用。
? ? 了解更多PSR-0
标准PHP库
标准PHP库(SPL)和PHP一起发布,提供了一组类和接口,包括了常用的数据结构如栈,队列和堆等,以及遍历这些数据结构的迭代器, 或者你还可以自己实现SPL接口。
? 学习更多SPL
命令行接口
PHP的主要目的是开发Web应用,不过它的命令行脚本接口(CLI)也非常有用。PHP命令行编程可以帮你完成自动化的任务,如测试,部署和 应用管理。
CLI PHP编程非常强大,可以直接调用你自己的app代码而无需创建Web图像界面,需要注意的是不要把CLI PHP脚本放在公开的
web目录下! 在命令行下运行PHP:
选项-i将会打印PHP
选项-a提供交互式shell,和ruby的IRB或python的交互式shell相似,此外还有很多其他有用的命令行选项。 接下来写一个简单的”Hello, $name” CLI程序,先创建名为hello.php的脚本:
PHP个数值, 它的第一个元素一直是PHP脚本的名字,如本例中为hello.php。
命令运行失败时,可以通过exit()表达式返回一个非0整数来通知shell,
常用的exit返回码可以查看列表 运行上面的脚本,在命令行输入:
? 学习如何在命令行运行PHP
? 学习如何在Windows环境下运行PHP命令行程序
依赖管理
如今有大量的PHP函数库、框架和组件可供选择,一个项目中