热烈祝贺台州朗动科技的站长论坛隆重上线!(2012-05-28)    热烈庆祝伟大的祖国60周年生日 点击进来我们一起为她祝福吧(2009-09-26)    站长论坛禁止发布广告,一经发现立即删除。谢谢各位合作!.(2009-08-08)    热烈祝贺台州网址导航全面升级,全新版本上线!希望各位一如既往地支持台州网址导航的发展.(2009-03-28)    台州站长论坛恭祝各位新年快乐,牛年行大运!(2009-01-24)    台州Link正式更名为台州网址导航,专业做以台州网址为主的网址导航!(2008-05-23)    热烈祝贺台州Link资讯改名为中国站长资讯!希望在以后日子里得到大家的大力支持和帮助!(2008-04-10)    热烈祝贺台州Link论坛改名为台州站长论坛!希望大家继续支持和鼓励!(2008-04-10)    台州站长论坛原[社会琐碎]版块更名为[生活百科]版块!(2007-09-05)    特此通知:新台州站长论坛的数据信息全部升级成功!">特此通知:新台州站长论坛的数据信息全部升级成功!(2007-09-01)    台州站长论坛对未通过验证的会员进行合理的清除,请您谅解(2007-08-30)    台州网址导航|上网导航诚邀世界各地的网站友情链接和友谊联盟,共同引领网站导航、前进!(2007-08-30)    禁止发广告之类的帖,已发现立即删除!(2007-08-30)    希望各位上传与下载有用资源和最新信息(2007-08-30)    热烈祝贺台州站长论坛全面升级成功,全新上线!(2007-08-30)    
便民网址导航,轻松网上冲浪。
台州维博网络专业开发网站门户平台系统
您当前的位置: 首页 » PHP/Perl编程 » PHP V5.3.0 新特性详解

PHP V5.3.0 新特性详解

论坛链接
  • PHP V5.3.0 新特性详解
  • 发布时间:2010-01-08 13:18:17    浏览数:7214    发布者:lbsong    设置字体【   
考察的特性

本文主要考察 PHP V5.3 的以下特性:

延迟静态绑定
名称空间
类方法重载
变量解析和 heredoc
但是,在继续之前,需要设置 PHP V5.3。

设置

PHP 广为人知的一个特点就是设置起来有点麻烦。这也许是因为 PHP 是安装在 Web 服务器(例如 Apache)上的,而且常常需要连接到外部数据库(例如 MySQL)。而且,某种意义上,PHP 脚本是嵌入在 HTML 代码中的。换句话说,PHP 这种技术横跨多个复杂的领域。所以,在编写 PHP 脚本代码之前,必须越过很多的障碍。我希望可以改善这一现状,但是与软件技术有关的很多事情仍然很困难。

图 1. PHP V5.3.0 安装成功



不过,对于那些使用 Apple Macs 的幸运读者来说,设置过程再简单不过了:

获得 PHP 二进制安装文件(http://www.entropy.ch/software/macosx/php/)。
在 System Preferences 中关闭 Web Sharing。
找到 /etc/apache2/httpd.conf 文件。
在 httpd.conf 文件中注释掉下面这行:LoadModule php5_module。
运行 PHP V5.3 安装文件(如果您愿意,也可以构建源代码)。
在 System Preferences 中打开 Web Sharing。
本文的目的不是仅仅介绍如何安装,所以如果您的平台是 Microsoft® Windows® 或 Linux®,请参阅一些很棒的 PHP 参考书籍(见我在 参考资料 中推荐的书籍)。

为了检查 PHP 是否已安装以及版本是否合适,在 /Library/WebServer/Documents 文件夹中创建一个名为 phpinfo1.php 的文件。清单 1 展示了这个脚本文件的内容。本文中的所有脚本都在 下载 小节提供的压缩(ZIP)文件中,所以实际上不需要创建任何文件。

清单 1. phpinfo1.php

<?php
phpinfo();
?>

将该脚本文件放在 /Library/WebServer/Documents 文件夹中之后,访问 http://localhost/phpinfo1.php。应该可以看到类似图 1 的界面。这里可能需要用您主机的 IP 地址替换 URL 中的 “localhost”。
      增强面向对象

任何能增强 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 名称空间




<?php
namespace test;
define('ASTRING', 'Hello World!');
define('test\ASTRING', 'Hello World from my namespace!');

echo "<p>My string is: ";
echo ASTRING;
echo "</p>";

echo "<p>My string is ";
echo \ASTRING;
echo "</p>";
?>




清单 3 中的代码产生以下输出:




My string is: Hello World from my namespace!
My string is: Hello World!




那么,代码中发生了什么?第一个 define 语句在名称空间 test 中创建一个字符串常量 ASTRING。然后,当引用 ASTRING 字符串时,引擎首先查看本地 test 名称空间。这就是为什么看到本地定义的字符串首先显示。然后,要看到全局定义的字符串,只需使用语法 \ASTRING。有了这些简单的规则,便可以使用任意数量的名称空间,而不必担心名称冲突。

有了名称空间功能,和之前相比,代码之间的界限更加清晰。而这一点又有助于团队环境中的代码整合。换句话说,不同的团队可以分配他们自己的名称空间,当所有团队成员都遵循这个惯例时,名称冲突的情况应该会降为零。这也是 5.3.0 版对 PHP 语言在面向对象方面的一个增强。
      类方法重载

在 PHP 中,术语重载(overloading) 与通常的面向对象上下文稍有不同。在 Java™ 语言或 C# 中,“重载” 方法是指为不同参数列表提供相同代码的方法。例如,如果有一个名为 draw(String str) 的方法,那么重载的方法可以有以下形式:draw(String str, int i)。这种方法符号名称被称作方法签名,为了便于重载,返回类型被省略。

在 PHP 中,“重载” 是指动态创建的方法和属性。这实际上是动态代码,任何这样的动态实体都是由所谓的魔术方法(magic methods) 来处理。可以在一个类中为各种不同的动作创建这些魔术方法。然后,当代码中遇到未声明或不可见的属性或方法时,便可以调用重载方法。这样风格的重载提供了很大程度上的灵活性。

听起来有些复杂,所以来看看一个具体的例子。清单 4 展示如何使用 PHP 重载调用对象和类方法。

清单 4. PHP 重载




<?php
class OverloadedMethodTest {
public function __call($name, $arguments) {
// The value of $name is case sensitive.
echo "Calling object method '$name' "
. implode(', ', $arguments)。 "\n";
}

/** As of PHP 5.3.0 */
public static function __callStatic($name, $arguments) {
// The value of $name is case sensitive.
echo "Calling static method '$name' "
. implode(', ', $arguments)。 "\n";
}
}

$obj = new OverloadedMethodTest;
$obj->runOverloadedTest('in an object context');

OverloadedMethodTest::runOverloadedTest('in a static context'); // As of PHP 5.3.0
?>




清单 4 中的代码产生以下输出:




Calling object method 'runOverloadedTest' in an object context
Calling static method 'runOverloadedTest' in a static context




在清单 4 中,注意重载的代码是如何根据调用代码来推断方法名和参数的:




$obj->runOverloadedTest('in an object context');

OverloadedMethodTest::runOverloadedTest('in a static context'); // As of PHP 5.3.0




要使用这种能力,程序员需要承担较大的责任。虽然重载为编写灵活的代码提供了便利,但同时也为错误提供了土壤。所以,使用重载时应该谨慎,并且要有严格的代码测试纪律。

变量解析和 heredoc

PHP 的优势之一在于字符串解析。PHP 对于字符串的长度没有限制,只要主机的可用内存够大就行。清单 5 展示了使用 PHP 时拥有的灵活性。

清单 5. PHP 解析




<?php
$beverage = 'coffee';
// The following works; "'" is an invalid character for variable names
echo "$beverage's taste is great";
// The following won't work; 's' is a valid character for variable names but the
echo "He drank a number of $beverages";
variable is "$beverage"
echo "He drank some ${beverage}s"; // works
echo "He drank some {$beverage}s"; // works
?>




清单 5 中的代码产生以下输出:




coffee's taste is great
He drank a number of
He drank some coffees
He drank some coffees




清单 5 中的代码并不是直到 PHP V5.3.0 才有的。这里给出这段代码,只是为了提醒您字符串处理支持和一些解析规则。但是,PHP V5.3.0 增加了增强的 heredoc 语法支持。清单 6 显示了一个简单的例子。

清单 6. PHP V5.3.0 heredoc 的应用




<?php
echo >>>"FOOBAR"
Hello World!
FOOBAR;
?>




清单 6 中的代码产生以下令人惊叹的输出:



Hello World!



那么,清单 6 有什么特别之处呢?PHP V5.3.0 中的 heredoc 支持使用双引号。其优点主要在于,双引号中的内容不会被解析,这样便有了更大的灵活性。基本上,这只是在已经强大的字符串支持的基础上增加了更多的灵活性。PHP V5.3.0 的在线参考包括更多关于这个主题和 PHP V5.3.0 其他相关主题的资料。
      结束语

PHP 是一项有吸引力的技术。它为拼凑式(pick-and-mix)网站开发提供了便利。您可以为网站增加数据库,PHP 语言为此提供了所需的绑定。您不需要重量级的应用服务器或 servlet 技术。换句话说,只需极小的投资 — 无论是财务上还是智力上的投资,就可以控制环境。

PHP 语言在不断演变,很高兴看到 V5.3.0 中的很多改进有效地增强了面向对象方面。这有助于 PHP 在与那些更重量级(也更昂贵)的 Web 设计方法的竞争中胜出。

在本文中,我讨论了延迟静态绑定、名称空间支持、类方法重载和 heredoc 支持。这只是 PHP V5.3.0 的冰山一角。还有很多其他专题,例如迁移到 V5.3.0。请参阅 参考资料 小节,获得关于这些专题和其他专题的详细信息。
娱乐休闲专区A 影视预告B 音乐咖啡C 英语阶梯D 生活百科
网页编程专区E AMPZF HTMLG CSSH JSI ASPJ PHPK JSPL MySQLM AJAX
Linux技术区 N 系统管理O 服务器架设P 网络/硬件Q 编程序开发R 内核/嵌入
管理中心专区S 发布网址T 版主议事U 事务处理