4. 语言亮点
编程范式
PHP 是一个灵活的动态语言,支持多种编程技巧。这几年一直不断的发展,重要的里程碑包含 PHP 5.0 (2004) 增加了完善的面向对象模型,PHP 5.3 (2009) 增加了匿名函数与命名空间以及 PHP 5.4 (2012) 增加的 traits。
面向对象编程
PHP 拥有完整的面向对象编程的特性,包括类,抽象类,接口,继承,构造函数,克隆和异常等。
函数式编程
PHP 支持函数是「第一等公民」,即函数可以被赋值给一个变量,包括用户自定义的或者是内置函数,然后动态调用它。函数可以作为参数传递给其他函数(称为_高阶函数_),也可以作为函数返回值返回。
PHP 支持递归,也就是函数自己调用自己,但多数 PHP 代码使用迭代。
自从 PHP 5.3 (2009) 之后开始引入对闭包以及匿名函数的支持。
PHP 5.4 增加了将闭包绑定到对象作用域中的特性,并改善其可调用性,如此即可在大部分情况下使用匿名函数取代一般的函数。
元编程
PHP 通过反射 API 和魔术方法等机制,支持多种形式的元编程。有许多魔术方法,如 __get()
, __set()
, __clone()
, __toString()
, __invoke()
等,可供开发者改变类的行为。 Ruby 开发者常说 PHP 缺少 method_missing
方法,实际上通过 __call()
和 __callStatic()
就可以完成相同的功能。
命名空间
如前所述,PHP 社区已经有许多开发者开发了大量的代码。这意味着一个类库的 PHP 代码可能使用了另外一个类库中相同的类名。如果他们都使用了同一个命名空间,那将会产生冲突导致异常。
命名空间 解决了这个问题。如 PHP 手册里所描述,命名空间好比操作系统中的目录,同名的两个文件可以共存于不同的目录中。同理同名的两个 PHP 类可以在不同的 PHP 命名空间下共存,就这么简单。
因此把你的代码放在你自己的命名空间下就非常重要,这样它可以被其他开发者使用,而不必担心与第三方库发生冲突。
PSR-4 提供了一种命名空间的推荐使用方式,用于提供标准的文件、类和命名空间的约定,进而让代码做到即插即用。
2014 年 10 月,PHP-FIG 废弃了原先的自动加载标准: PSR-0 ,但新的自动加载标准 PSR-4 要求 PHP 5.3 以上的版本,而许多项目仍在使用 PHP 5.2,所以目前新旧两个标准都是完全可用的。
如果您要为新应用程序或扩展包使用自动装载标准,请查看PSR-4规范。
PHP标准库
PHP标准库 (SPL) 与PHP打包在一起, 并提供了类和接口的集合. 它主要由常见的数据结构类(栈,队列,堆等)和迭代器组成, 可以遍历这些数据结构或您自己的实现spl接口的类。
命令行界面
PHP是为编写Web应用程序而创建的,而且对于编写命令行界面(CLI)程序脚本也很有用。 命令行PHP程序可以帮助自动执行测试、部署和管理应用程序等常见任务。
CLI PHP程序功能强大,因为您可以直接使用应用程序的代码,而无需为其创建和获得Web GUI。只需确保 不要 将您的CLI PHP脚本放在您的公共Web根目录中!
尝试从您的命令行运行php:
> php -i
-i
选项将像 phpinfo()
函数一样打印您的PHP配置.
-a
选项提供了一个交互式shell,类似于Ruby的IRB或Python的交互式shell。这也有许多其他有用的 命令行选项。
接下来编写一个简单的 「Hello, $name」 CLI 程序, 先创建名为 hello.php
的脚本
<?php
if ($argc !== 2) {
echo "Usage: php hello.php <name>" . PHP_EOL;
exit(1);
}
$name = $argv[1];
echo "Hello, $name" . PHP_EOL;
PHP 会在脚本运行时根据参数设置两个特殊的变量,$argc
是一个整数,表示参数个数,$argv
是一个数组变量,包含每个参数的值,它的第一个元素一直是 PHP 脚本的名称,在本例中为 hello.php
。
命令运行失败时,可以通过 exit()
表达式返回一个非 0 整数来通知 shell,常用的 exit 返回码可以查看列表。
运行上面的脚本,在命令行输入:
> php hello.php
Usage: php hello.php <name>
> php hello.php world
Hello, world
Xdebug
合适的调试器是软件开发中最有用的工具之一, 使你可以跟踪程序执行结果并监视程序堆栈中的信息。Xdebug 是一个 php 的调试器,它可以被用来在很多 IDE(集成开发环境) 中做断点调试以及堆栈检查。它还可以像 PHPUnit 和 KCacheGrind 一样,做代码覆盖检查或者程序性能跟踪。
如果你仍在使用 var_dump()
/print_r()
调试, 经常会发现自己处于困境,并且仍然找不到解决办法。这时,你该使用调试器了。
安装 Xdebug 可能很棘手,但是其中最重要的一种特性「远程调试」 - 当您在本地开发代码,然后在虚拟机或者其他服务器上测试时,远程调试可能是你想要的一种方式
一般情况下你需要修改你的 Apache VHost 或者 .htaccess 文件的这些值:
php_value xdebug.remote_host 192.168.?.?
php_value xdebug.remote_port 9000
「remote host」 和 「remote port」 这两项对应和你本地开发机监听的地址和端口。然后将你的 IDE 设置成「listen for connections」模式,并访问网址:
http://your-website.example.com/index.php?XDEBUG_SESSION_START=1
你的 IDE 将会拦截当前执行的脚本状态,运行你设置的断点并查看内存中的值。
图形化的调试器可以让你非常容易的逐步的查看代码、变量,以及运行时的 evel 代码。许多 IDE 已经内置或提供了插件支持 XDebug 图形化调试器。比如 MacGDBp 是 Mac 上的一个免费,开源的单机调试器。
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。