PHP5.3已经正式发布了…打算抽点时间把 Migrating from PHP 5.2.x to PHP 5.3.x(从PHP5.2.x迁移到PHP5.3.x)翻译成中文,慢慢写咯…因个人能力限制…难免有错误,欢迎指正
- 新的内部参数解析 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)方法。
下面的关键字已经被保留,不允许用在函数、类等的名字内。
- 新增:支持 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 版本是 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 的支持已经被加入到如下函数中:
- checkdnsrr()
- dns_get_record()
- fnmatch()
- getmxrr()
- getopt()
- imagecolorclosesthwb()
- inet_ntop()
- inet_pton()
- link()
- linkinfo()
- mcrypt_create_iv()
- readlink()
- socket_create_pair() – 这个函数之前在 Windows 下是可用的,但是因为 bug 被 PHP 4.3.0 屏蔽。
- stream_socket_pair()
- symlink()
- time_nanosleep()
- time_sleep_until()
其他改变:
- 改良了 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(预定义常量)。
提示: 现在已经创建了一个全新的专注于 Wiudows 下 PHP 的网站, 包含各种版本的下载, 发布候选, 和快照 (thread-safe/not-thread-safe (线程安全/非线程安全), VC6/VC9, x86/x64)。网站的 URL » http://windows.php.net/。
- 一个成名于 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.0 引入了两个新的错误标示: E_DEPRECATED 和 E_USER_DEPRECATED。E_DEPRECATED 用来表明一个函数或者功能不建议使用。E_USER_DEPRECATED 表示不建议使用的功能是用户代码,类似 E_USER_ERROR 和 E_USER_WARNING。
下面的列表是不建议使用的 INI 指令(PS:就是 php.ini 中的参数)。使用这些中的任何一个指令都会在启动的时候抛出一个 E_DEPRECATED 错误。
- define_syslog_variables
- register_globals
- register_long_arrays
- safe_mode
- magic_quotes_gpc
- magic_quotes_runtime
- magic_quotes_sybase
- 在 .INI 文件一行开头使用‘#’作为注释现在是不推荐的。
不建议使用的函数:
- call_user_method() (使用 call_user_func() 代替)
- call_user_method_array() (使用 call_user_func_array() 代替)
- define_syslog_variables()
- dl()
- ereg() (使用 preg_match() 代替)
- ereg_replace() (使用 preg_replace() 代替)
- eregi() (使用 preg_match() 结合 ‘i’ 修饰符以代替)
- eregi_replace() (使用 preg_replace() 结合 ‘i’ 修饰符以代替)
- set_magic_quotes_runtime() 和它的别名 magic_quotes_runtime()
- session_register() (使用 $_SESSION 超全局变量(superglobal)代替)
- session_unregister() (使用 $_SESSION 超全局变量(superglobal)代替)
- session_is_registered() (使用 $_SESSION 超全局变量(superglobal)代替)
- set_socket_blocking() (使用 stream_set_blocking() 代替)
- split() (使用 preg_split() 代替)
- spliti() (使用 preg_split() 结合 ‘i’ 修饰符以代替)
- sql_regcase()
- mysql_db_query() (使用 mysql_select_db() 和 mysql_query() 代替)
- mysql_escape_string() (使用 mysql_real_escape_string() 代替)
- 将区域设置类(locale category. PS:指区域或者文化环境的特征,例如时间/日期格式、数字格式、货币符号等)名字作为字符串传递现在不再建议使用。使用 LC_* 前缀的常量代替。
- mktime() 函数中的 is_dst 参数。使用新的时区处理函数代替。
不建议使用的功能:
- 将 new 的返回值指定为引用现在不推荐。(PS:大概是 $object = &new stdClass; 这种形式)
- Call-time pass-by-reference (执行时传递引用?PS:可能是指 func(&$param) 这样)不推荐。
- 使用 {} 访问字符串坐标(string offsets)不推荐。使用 [] 代替。(PS:似乎这三条从 PHP5.0 开始就不建议使用了,这次可能是把错误类型从 E_STRICT 改成了新的 E_DEPRECATED)
基于对 is_a() 函数的广泛需求,不再反对它的使用;使用这个函数不会再产生 E_STRICT 错误。
在 PHP 5.3 中部分函数提供了新的可选参数:
PHP 核心:
- clearstatcache() – 增加了 clear_realpath_cache 和 filename .
- 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:
- json_encode() – 增加 options .
- json_decode() – 增加 depth .
- stream_select(), stream_set_blocking(), stream_set_timeout() 和 stream_set_write_buffer() 现在可以利用用户空间的数据流封装(user-space stream wrappers)。
- sybase_connect() – 增加 new .
PHP 5.3.0 中新的方法参数:
PHP 参数:
Exception::__construct – 增加 previous .
PHP 5.3 引入了一些新的函数:
PHP 核心:
- array_replace() – 将最为第一个参数传入的数组中的元素替换成后面传入的数组。
- array_replace_recursive() – 递归的替换数组中的元素。
- class_alias() – 为用户定义的类建立一个别名。
- forward_static_call() – 在方法内(method context)执行用户函数。
- forward_static_call_array() – 在方法内(method context)执行用户函数,参数使用数组。
- gc_collect_cycles() – 强制收集已存在的垃圾回收数据(garbage cycles)。
- gc_disable() – 关闭回收引用收集器(the circular reference collector)。
- gc_enable() – 激活回收引用收集器(the circular reference collector)。
- gc_enabled() – 返回回收引用收集器(the circular reference collector)的状态。
- get_called_class() – 返回执行静态方法的类名。
- gethostname() – 返回本地服务器当前的主机名(host name)。
- header_remove() – 删除之前使用 header() 函数设置的 HTTP 头信息(HTTP header)。
- lcfirst() – 将字符串第一个字符转换成小写。
- parse_ini_string() – 解析配置字符串。
- quoted_printable_encode() – 将 8 bit 字符串转换成 quoted-printable 编码的字符串。(PS:quoted-printable 编码是 MIME 邮件中常用的编码格式)
- str_getcsv() – 将 CSV 字符串解析成数组。
- stream_context_set_default() – 设置默认的 stream context(数据流环境?或者叫数据流资源?)。
- stream_supports_lock() – 如果数据流支持锁则返回 TRUE。
- stream_context_get_params() – 从 stream context 中取回参数。
- streamWrapper::stream_cast() – 取回基本的 stream resource(数据流资源)。
- streamWrapper::stream_set_option() – 修改 stream(数据流)选项。
- date_add() – 将一个 DateTime 对象增加某个数量的天、月、年、小时、分钟或者秒。
- date_create_from_format() – 返回给定的格式的新 DateTime 对象。
- date_diff() – 返回两个 DateTime 对象的不同。(PS:大概是时间差吧,还没试过)
- date_get_last_errors() – 返回最近一次日期/时间操作产生的警告或者错误。
- date_parse_from_format() – 获得给定日期的信息。
- date_sub() – 将一个 DateTime 对象减去某个数量的天、月、年、小时、分钟或者秒。
- timezone_version_get() – 返回时区数据库(timezonedb)的版本。
GMP:
- gmp_testbit() – Tests whether a bit is set.
Hash:
- hash_copy() – Copy hashing context.
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:
- json_last_error() – Returns the last JSON error that occurred.
- mysqli_fetch_all() – Fetches all result rows as an associative array, a numeric array, or both.
- mysqli_get_connection_stats() – Returns statistics about the client connection.
- mysqli_poll() – Poll connections.
- mysqli_reap_async_query() – Get result from async query.
- openssl_random_pseudo_bytes() – Returns a string of the given length specified, filled with pseudo-random bytes.
- pcntl_signal_dispatch() – Calls signal handlers for pending signals.
- pcntl_sigprocmask() – Sets and retrieves blocked signals.
- pcntl_sigtimedwait() – Wait for signals with a timeout.
- pcntl_sigwaitinfo() – Wait for signals.
PCRE:
- preg_filter() – Perform a regular expression search and replace, reutrning only results which matched the pattern.
- msg_queue_exists() – Check whether a message queue exists.
- shm_has_var() – Checks whether a specific key exists inside a shared memory segment.
The following functions are now natively implemented, making them available on all operating systems which can run PHP: