3、PV5.2的基础上,并对该语言作了增强,使之更加强大。在本文中,了解PHPV5.3中的变化,以及从PHPV5.2升级到PHPV5.3时需要考虑的一些事情。 语法变化 该语言新增了名称空间和闭包(在第2部分和第3部分中有讨论到),增加了更多的保留字。从PHPV5.3开始,namespace不再用作标识符。closure类现在是一个保留类,但它仍然可以作为有效的标识符。清单1显示了一些例子,由于新增的保留字的缘故,有些语句在PHPV5.3中不再有效。 清单1.无效的PHP语句 // the fun
4、ction 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 { .... } PHPV5.3中还增加了对goto语句的支持。现在,goto是一个保留字。goto语句在现代语言中不太常见(您也许记得在B
5、ASIC中如何使用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语句。这将使代码阅读起来清晰很多。 函数和方法的变化
7、组 $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 魔术类方法现在受到更严格的限制。下面的方法必须具有公共可见性: __
8、get __set __isset __unset __call 现在,当在静态上下文中使用__call时,为了应对上述变化,可以使用新的__callStatic()魔术方法。除了不接受参数的__isString()魔术方法以外,这些方法的必需参数都是强制性的,并且必须提供。清单4显示了如何使用这些方法以及它们的必需参数。 清单4.使用魔术方法 class Foo { public function __get($key) {} //