现在,已经可以下载和使用针对开发人员的 PHP V6,所以您可以看到其中的一些特性已经支持 Unicode 字符串。要获取已经经过测试和验证的可以处理 Unicode 的函数,参见 参考资料。
|
名称空间
名称空间 是一种避免函数名和类名出现冲突的方法,并且不会在命名约定中使用前缀,从而增强了函数名和类名的可读性。因此通过使用名称空间,您可以使用可能已被他人使用的类名,但不用担心出现问题。清单 1 提供一个 PHP 的名称空间例子。
您不需要对代码进行任何更新或修改,因为不包含名称空间的 PHP 代码将能够正常运行。因为名称空间特性向后支持至 PHP V5.3,因此当该特性可用时,您可以在 PHP 应用程序中引入名称空间。
清单 1. 名称空间的例子
<?php // I'm not sure why I would implement my own XMLWriter, but at least // the name of this one won't collide with the one built in to PHP namespace NathanAGood; class XMLWriter { // Implementation here... } $writer = new NathanAGood::XMLWriter(); ?> |
Web 2.0 特性
取决于您使用 PHP 的方式以及当前的代码,PHP V6 中的语言和语法差别对您的影响可能没有接下来的特性大,这些特性允许您将 Web 2.0 特性直接引入到 PHP 应用程序中。
SOAP
SOAP 是 Web 服务采用的协议之一,并且在许多其他语言中都得到支持,比如 Java 编程语言和 Microsoft® .NET。尽管有许多其他方式可以使用和公开 Web 服务(比如 Representational State Transfer,REST),SOAP 仍然是实现不同平台之间的交互性的常用方法。除了 PHP Extension and Application Repository (PEAR) 库中的 SOAP 模块之外,PHP V5 还引入了一个 SOAP 扩展。默认情况下这个扩展是禁用的,所以您或您的 ISP 必须启用它。此外,您可以通过 PEAR 包构建 SOAP 客户端和服务器,比如 SOAP 包。
除非您更改了默认设置,否则 SOAP 扩展在 PHP V6 中是启用的。这些扩展为实现 SOAP 客户端和 SOAP 服务器提供一种简易的方法,从而使您能够构建使用和提供 Web 服务的 PHP 应用程序。
如果默认启用了 SOAP 扩展,您就不需要在 PHP 中配置它们。如果您开发了 PHP 应用程序并发布给 ISP,那么您必须和 ISP 进行核实,确保他们在升级时为您启用 SOAP 扩展。
XML
从 PHP V5.1 开始,XMLReader 和 XMLWriter 就成为了 PHP 核心的一部分,这使您能够在 PHP 应用程序中更加轻松地处理 XML。与 SOAP 扩展一样,如果您使用 SOAP 或 XML 的话,这个特性是个好消息,因为 PHP V6 比 V4 更适合您。
XMLWriter 和 XMLReader 是基于流的面向对象类,它们允许您读写 XML,并且不要担心 XML 的细节。
删除的特性
PHP V6 在添加一些新特性的同时,也删除了以前版本中的一些函数和特性。被删除的大部分东西,比如 register_globals 和 safe_mode,在当前的 PHP 中都被广泛认为是 “有漏洞的”,因为它们可能招致安全风险。为了保持 PHP 的简洁性,将删除下面小节列出的函数和特性。在 ISP 或企业升级到 PHP V6 之后,反对删除这些内容的人很可能会给现有的脚本带来安全问题,而支持删除的人将会很幸运,因为 PHP 团队为他们修复了一些漏洞,并且提供更加干净、安全的实现。
从 PHP V6 删除的特性包括:
- magic_quotes
- register_globals
- register_long_arrays
- safe_mode
magic_quotes
由于 magic_quotes 导致可移植性、性能和易用性方面的问题,所以 PHP 文档不鼓励使用它。鉴于这个原因,PHP V6 干脆删除了该特性。因此,在升级到 PHP V6 之前,要确保您的代码没有使用 magic_quotes。如果您正在使用 magic_quotes 为数据库调用转换字符串类型,请使用数据库实现的参数化查询(如果支持的话)。如果不支持参数化查询,请使用数据库实现的类型转换函数,比如针对 MySQL 的 mysql_escape_string 或针对 PostgreSQL 的 pg_escape_string。清单 2 显示了一个使用 magic_quotes 的例子。
清单 2. 使用 magic_quotes(不推荐)
___FCKpd___1 |
在针对新版本 PHP 进行处理之后,您的 PHP 代码应该类似于清单 3。
清单 3. 使用参数化查询(推荐)
___FCKpd___2 |
既然即将完全删除对 magic_quotes 的支持,get_magic_quotes_gpc() 函数就不再可用。这可能会影响一些老版本的 PHP 脚本,因此在更新之前,确保对所有存在这些函数的地方进行修复。
register_globals
register_globals 配置键在 PHP V4.2 中已经默认关闭,当时也引起了争议。当 register_globals 打开之后,就能轻松地使用可能注入了来自 HTML 表单的值的变量。因为在脚本中并不真正需要初始化这些变量,所以很容易编写出带有安全漏洞的脚本。register_globals 文档(见 参考资料)提供关于 register_globals 的更多信息。清单 4 是一个使用 register_globals 的例子。
清单 4. 使用 register_globals(不推荐)
<?php // A security hole, because if register_globals is on, the value for user_authorized // can be set by a user sending them on the query string // (i.e., http://www.example.com/myscript.php?user_authorized=true) if ($user_authorized) { // Show them everyone's sensitive data... } ?> |
如果您的 PHP 代码使用了全局变量,那么应该更新它。即便不是为了使用新版本的 PHP 而更新它,从安全角度考虑,您也应该进行更新。更新完成之后,您的代码应该类似于清单 5。
清单 5. 更加明确的代码(推荐)
<?php function is_authorized() { if (isset(PHP 的版本 V6 包含一些新特性和语法改进,从面向对象的角度看,PHP6 更加易于使用。其他重要特性(比如在许多核心函数中支持 Unicode)反映了 PHP V6 力争获得更好的国际通用性支持和健壮性。
时间:2009-06-30 14:17
来源:developerWorks 中国
作者:Nathan A. Good
原文链接
好文,顶一下
(0)
0%
文章真差,踩一下
(1)
100%
------分隔线----------------------------
把开源带在你的身边-精美linux小纪念品
|