PHP 5.3 与 PHP 5.2 开发区别和新特性
PHP V5.3 发布已经很久。“PHP V5.3 中的新特性” 系列文章将持续介绍该发行版提供的令人兴奋的新特性。 简介 本系列着重介绍 PHP V5.3 中的新特性,例如名称空间、闭包、对象管理、面向对象编程和 Phar。虽然这些动人的新特性作为该语言的增补广受欢迎,但 PHP V5.3 同时也是为进一步优化 PHP 而设计的。它构建在流行、稳定的 PHP V5.2 的基础上,并对该语言作了增强,使之更加强大。在本文中,了解 PHP V5.3 中的变化,以及从 PHP V5.2 升级到 PHP V5.3 时需要考虑的一些事情。 语法变化 该语言新增了名称空间和闭包(在 第 2 部分 和 第 3 部分 中有讨论到),增加了更多的保留字。从 PHP V5.3 开始,namespace 不再用作标识符。closure 类现在是一个保留类,但它仍然可以作为有效的标识符。清单 1 显示了一些例子,由于新增的保留字的缘故,有些语句在 PHP V5.3 中不再有效。 清单 1. 无效的 PHP 语句 // the function definition below will throw a fatal error in PHP 5.3, but is perfectly // valid in 5.2 function namespace() { .... } // same with this class definition class Closure { .... } PHP V5.3 中还增加了对 goto 语句的支持。现在,goto 是一个保留字。goto 语句在现代语言中不太常见(您也许记得在 BASIC 中如何使用 goto),但是有些情况下,goto 语句的确方便。清单 2 显示了一个如何使用 goto 语句的例子。 清单 2. PHP 中的 goto 语句 echo "This text will get outputted"; goto a; echo "This text will get skipped"; a: echo "This text will get outputted"; goto 的一个可能的用例是中断深度嵌套的循环和 if 语句。这将使代码阅读起来清晰很多。 函数和方法的变化 在 PHP V5.3 中,函数和方法没有大的变化,但还是有一些增强,以帮助解决 PHP 中的一些突出问题并提高性能。本节讨论一些较为显著的变化。 在之前版本的 PHP 中,数组函数 atsort、natcasesort、usort、uasort、uksort、array_flip 和 array_unique 可以以参数形式传递对象而不是数组。然后,这些函数将对象的属性当做数组的键和值。PHP V5.3 中不再支持这一点,所以需要首先将对象转换成数组。清单 3 展示了如何修改代码。 清单 3. 为某些函数修改代码,将对象转换成数组 $obj = new stdClass; $obj->a = ''1''; $obj->b = ''2''; $obj->c = ''3''; print_r(array_flip($obj)); // will NOT work in PHP 5.3, but will in PHP 5.2 print_r(array_flip((array) $obj)); // will work in PHP 5.3 and 5.2 魔术类方法现在受到更严格的限制。下面的方法必须具有公共可见性: __get __set __isset __unset __call 现在,当在静态上下文中使用 __call 时,为了应对上述变化,可以使用新的 __callStatic() 魔术方法。除了不接受参数的 __isString() 魔术方法以外,这些方法的必需参数都是强制性的,并且必须提供。清单 4 显示了如何使用这些 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |