Migrating from PHP 5.2.x to PHP 5.3.x

PHP5.3已经正式发布了…打算抽点时间把 Migrating from PHP 5.2.x to PHP 5.3.x(从PHP5.2.x迁移到PHP5.3.x)翻译成中文,慢慢写咯…因个人能力限制…难免有错误,欢迎指正

未向下兼容的变化
大部分现有的PHP5代码是不需要改变的,不过请注意下面这些变化:
  • 新的内部参数解析 API 已经被应用在 PHP 5.3.x 绑定的所有扩展上。这个 API 使得函数在传入不兼容的参数时返回 NULL。这条规则也有一些例外,例如函数 get_class(),在出错的时候将继续返回 FALSE。
  • clearstatcache() 默认不再清除真实路径缓存(realpath cache)。(PS:函数增加了两个有关的参数,具体请看手册)
  • realpath() 现在已经是与平台完全无关的了。
  • call_user_func() 这一系的函数现在可以使用 $this ,即使是在父类中执行也可以这样使用。
  • 以下数组函数 natsort(), natcasesort(), usort(), uasort(), uksort(), array_flip()array_unique() 不再支持对象(object)参数 如果要将这些函数应用于一个对象(object),首先需要将这个对象强制转换成数组。
  • 使用引用参数(by-reference parameters)的函数传入值的行为被改变了。之前函数可以接受值参数(by-value argument),现在将会触发一个警告(warning),同时所有应用参数被设置为 NULL
  • 新的 mysqlnd 库(PS:此为PHP 5.3 新加入的原生 MySQL 驱动,用于代替之前使用的 MySQL Client,全称 MySQL Native Driver) 需要使用 MySQL 4.1 之后引入的新的 41字节(41-byte) 密码格式。继续mysql_connect() 和类似的函数中使用老的 16字节(16-byte)密码将会触发错误 “mysqlnd cannot connect to MySQL 4.1+ using old authentication.”(mysqlnd 无法使用过时的验证方式连接 MySQL 4.1+
  • 路径 / 已经从 SplFileInfo 类和其他有关目录的类中移除。
  • 魔术方法(magic method__toString 不再接收参数。
  • 以下魔术方法(magic method __get, __set, __isset, __unset__call 必须总是公开的(public)而且不允许是静态方法(static)。这些方法的标签从现在开始是强制性的。
  • 魔术方法(magic method __call 现在可以被调用来访问私有(private)或者受保护的(protected)方法。

下面的关键字已经被保留,不允许用在函数、类等的名字内。

新功能
PHP 5.3.0 提供了多方面的新功能:
  • 新增:支持 namespaces (名字空间)。
  • 新增:支持 Late Static Bindings (延迟静态绑定)。
  • 新增:支持 jump labels (跳转标签,有限制的 goto) 。
  • 新增:支持原生的 Closures (闭包,表达式函数/匿名函数)。
  • 两个新的魔术方法(magic methods),__callStatic__invoke.
  • 现在支持 Nowdoc 语法,类似于 Heredoc 语法,但是名字上加上单引号。
  • 现在可以将 Heredocs 用来初始化静态变量(static variables)和类的属性/常量(class members/constants).
  • Heredocs 现在可以在声明的时候名字两边使用双引号,以作为新增的 Nowdoc 语法的补充。
  • Constants (常量)现在可以在类以外的地方使用 const 关键字进行声明。
  • ternary operator(三元运算符)现在可以使用简写形式:?:(PS:expr1 ?: expr3, expr1 true 的时候返回 expr1,否则返回 expr3
  • The HTTP stream wrapper(HTTP 数据流封装?)现在认为从 200 到 399 之间的状态代码(status codes)都是表示成功。
  • 现在可以动态的访问静态方法(static methods)。(PS:大概指的就是 __callStatic)
  • Exceptions (异常处理)现在可以嵌套使用。
  • 新增了一个垃圾回收器(garbage collector),默认是开启的。
为支持 Windows 所做的修改
PHP 发布的 Windows 版的修改:
  • 最低的 Windows 版本是 Windows 2000; Windows 98, ME 和 NT4 不再支持。
  • Windows 二进制包现在指定为 i586 或更高。 i386 和 i486 不再支持。
  • 在 Windows 平台上 PHP 提供对 x64 实验性的支持。
  • 现在编译器支持 Visual C++ 9 (VC9),可以使用 Visual Studio 2008。快照和发布版现在同样可以支持 VC9。对以前那样使用 VC6 编译的二进制包依然提供支持,将随着 VC9 产品线一起发布。
  • PDO_OCI php_pdo_oci8.dll 库 (使用 Oracle 8 客户端库) 不再构建。 取而代之,使用基于 Oracle 10 或 11 客户端库的 php_pdo_oci.dll (注意没有 ‘8’) 。 连接其他数据库版本的功能依然是被支持的
  • 为了 OCI8 扩展,一个新的库 php_oci8_11g.dll 可以用作 php_oci8.dll 的补充。任何时候这两个库都只能开启其中的一个。php_oci8.dll 使用 Oracle 10.2 客户端库。php_oci8_11g.dll 使用 Oracle 11 客户端库。 连接其他数据库版本的功能依然是被支持的

对 Windows 的支持已经被加入到如下函数中:

其他改变:

  • 改良了 stat(), touch(), filemtime(), filesize() 和其他有关函数的可移植性 (对有效数据 (the available data)具有 100% 的可移植性).
  • 现在可以在 Windows 下使用 link() 函数建立硬连接(hard links),使用 symlink() 建立符号连接(symbolic links)。硬链接用于 Windows 2000,符号连接用于 Windows Vista.
  • Windows 版 PHP 现在公布了一组新的常量,使用前缀 PHP_WINDOWS_*。有关的常量列表和用途请查阅 Predefined Constants(预定义常量)。
警告
ISAPI 模块支持已经被放弃。可以使用改进的 FastCGI SAPI 模块来代替。

提示: 现在已经创建了一个全新的专注于 Wiudows 下 PHP 的网站, 包含各种版本的下载, 发布候选, 和快照 (thread-safe/not-thread-safe (线程安全/非线程安全), VC6/VC9, x86/x64)。网站的 URL » http://windows.php.net/

SAPI 模块的改变
  • 一个成名于 litespeed 的新 SAPI 模块被启用。
  • FastCGI 现在总是开启的,而且不能被关闭。请查看 sapi/cgi/CHANGES 获得更多的信息。
  • 增加了一个新的 CGI SAPI 选项 -T,用来测量脚本的重复执行时间。
  • CGI/FastCGI 现在支持 .htaccess-style user-defined php.ini files。( .htaccess 风格 用户定义的 php.ini文件?
  • dl() 函数当前默认是关闭的,并且只能用于 CLI, CGI 和嵌入式 SAPIs (embed SAPIs)。
PHP 5.3.x 中不建议使用的功能

PHP 5.3.0 引入了两个新的错误标示: E_DEPRECATEDE_USER_DEPRECATEDE_DEPRECATED 用来表明一个函数或者功能不建议使用。E_USER_DEPRECATED 表示不建议使用的功能是用户代码,类似 E_USER_ERRORE_USER_WARNING

下面的列表是不建议使用的 INI 指令(PS:就是 php.ini 中的参数)。使用这些中的任何一个指令都会在启动的时候抛出一个 E_DEPRECATED 错误。

不建议使用的函数:

不建议使用的功能:

  • new 的返回值指定为引用现在不推荐。(PS:大概是 $object = &new stdClass; 这种形式)
  • Call-time pass-by-reference (执行时传递引用?PS:可能是指 func(&$param) 这样)不推荐。
  • 使用 {} 访问字符串坐标(string offsets)不推荐。使用 [] 代替。(PS:似乎这三条从 PHP5.0 开始就不建议使用了,这次可能是把错误类型从 E_STRICT 改成了新的 E_DEPRECATED
PHP 5.3.x 不再反对的功能

基于对 is_a() 函数的广泛需求,不再反对它的使用;使用这个函数不会再产生 E_STRICT 错误。

新的参数

在 PHP 5.3 中部分函数提供了新的可选参数:

PHP 核心:

  • clearstatcache()增加了 clear_realpath_cachefilename .
  • copy() – 增加数据流环境参数(stream context parameter), context .
  • fgetcsv() – 增加 escape .
  • ini_get_all()增加 details .
  • mail() 函数现在支持记录发送的邮件。(注:只有通过这个函数发送邮件时才有效)
  • nl2br() – 增加 is_xhtml .
  • parse_ini_file() – 增加 scanner_mode .
  • round() – 增加 mode .(PS:现在不光是四舍五入这一种形式了)
  • stream_context_create() – 增加 params .
  • strstr()stristr() – 增加 before_needle .(PS:可以取指定字符前面的部分了)

json:

Streams:

sybase_ct:

PHP 5.3.0 中新的方法参数:

PHP 参数:

Exception::__construct – 增加 previous .

新的函数

PHP 5.3 引入了一些新的函数:

PHP 核心:

Date/Time:

GMP:

Hash:

IMAP:

  • imap_gc() – Clears IMAP cache.
  • imap_utf8_to_mutf7() – Encode a UTF-8 string to modified UTF-7.
  • imap_mutf7_to_utf8() – Decode a modified UTF-7 string to UTF-8.

JSON:

MySQL Improved:

OpenSSL:

PCNTL:

PCRE:

  • preg_filter() – Perform a regular expression search and replace, reutrning only results which matched the pattern.

Semaphore:

The following functions are now natively implemented, making them available on all operating systems which can run PHP:

发表评论

电子邮件地址不会被公开。 必填项已用*标注