考察的特性 本文主要考察 PHP V5.3 的以下特性:
?
延迟静态绑定
? ?
名称空间 类方法重载
?
变量解析和 heredoc
但是,在继续之前,需要设置 PHP V5.3。 设置 PHP 广为人知的一个特点就是设置起来有点麻烦。这 也许是因为 PHP 是安装在 Web 服务器(例如 Apache)上的,而且常常需要连接到外部数据库(例 如 MySQL)。而且,某种意义上,PHP 脚本是嵌入在
HTML 代码中的。 换句话说, PHP 这种技术横跨多个复 杂的领域。所以,在编写 PHP 脚本代码之前,必须越 过很多的障碍。我希望可以改善这一现状,但是与软 件技术有关的很多事情仍然很困难。 不过,对于那些使用 Apple Macs 的幸运读者来说, 设置过程再简单不过了:
1.
获得 PHP 二进制安装文件 /php/)。
(entropy.ch/software/macosx
2.
在 System Preferences 中关闭 Web Sharing。
3.
找到 /etc/apache2/httpd.conf 文件。 在 httpd.conf 文件中注释掉下面这行: LoadModule php5_module。
4.
5.
运行 PHP V5.3 安装文件(如果您愿意,也可 以构建
源代码)。
6.
在 System Preferences 中打开 Web Sharing。
本文的目的不是仅仅介绍如何安装,所以如果您的平 台是 Microsoft? Windows? 或 Linux?,请参阅一些 很棒的 PHP 参考书籍 (见我在 参考资料 中推荐的书 籍)。 为了检查 PHP 是否已安装以及版本是否合适,在 /Library/WebServer/Documents 文件夹中创建一个 名为 phpinfo1.php 的文件。 清单 1 展示了这个脚本 文件的内容。本文中的所有脚本都在 下载 小节提供 的
压缩(ZIP)文件中,所以实际上不需要创建任何文 件。 清单 1. phpinfo1.php
将该脚本文件放在 /Library/WebServer/Documents 文件夹中之后,访问 localhost/phpinfo1.php。 应该可以看到类似 图 1 的界面。 这里可能需要用您主机的 IP 地址替换 URL 中的 “localhost”。 图 1. PHP V5.3.0 安装成功
延迟静态绑定 PHP V5.3 扩展了 static 关键词的使用。现在,无需 实例化类便可访问静态类方法和属性。当类不存在对 象, 或者不需要对象时, 这个特性就比较方便。 清单 2
展示了延迟静态绑定的一个例子。 清单 2. 延迟静态绑定
?>
清单 2 中的代码产生以下输出: Calling who method from class B
在 PHP V5.3.0 之前,类 A 中的方法可能被定义为 self::who()。不幸的是,这将导致调用类 A 中的函 数, 而不是子类 B 中的函数。 V5.3.0 用 static:: PHP 关键词修复了这个问题,允许在运行时才引用之前调 用
的类方法。显然这就是清单 2 中代码的目的。 增强面向对象 任何能增强 PHP 面向对象方面的改变都是受鼓励的, 因为这将导致更可靠的设计和更易于维护的代码。对 于清单 2 中的代码我有些许微词,基类(A)和派生 类(B)中的 who() 方法是重复的。如果类 B 中不必 复制该代码就好了,但是似乎 PHP V5.3.0 中的 __CLASS__ 语法要求必须这么做。也就是说, __CLASS__ 不支持延迟绑定。 清单 2 中使用 __CLASS__ 也许有点勉强,但确实可 以说明 PHP V5.3.0 有一个小小的
问题。显然,对于 清单 2 中的例子, 这不是多大的问题, 但是对于有数
千行 PHP 代码的网站来说, 就没那么简单了。 重复代 码通常意味着重复劳动。 名称空间 PHP V5.3 提供名称空间功能,以增强该语言的封装能 力。名称空间在现代语言中非常常见,例如 C# 和 XML。 名称空间的主要优点是, 通过它可以为代码符号 (类、函数和常量)定义独立的容器,这听起来有点 复杂,其实不然。清单 3 显示了使用 PHP 名称空间 定义本地和全局字符串常量的一个例子。 清单 3. PHP 名称空间