技术开发 频道

初步了解 PHP V6 中的新特性

  删除不赞成使用的行为

  在 PHP V6 中删除了一些在早期的 PHP 版本中不赞成使用的行为。allow_call_time_pass_reference 配置指定在运行时通过引用传递参数时是否发出警告,它在 PHP V5 中就不推荐使用。在 PHP V6 中删除了 allow_call_time_pass_reference。

  如果要指定哪个参数是通过引用传递的,更好的方法是使用声明函数。在 PHP V6 中,call-time-pass-by-reference 将抛出一个 E_STRICT 错误。在 PHP V6 中,“var” 已经成为 “public” 的别名,并且删除了 E_STRICT 警告。受 "new lt;object-name>" 的影响,也删除了 return-by-reference。通过引用赋值 “new” 将抛出一个 E_STRICT 错误。例如,下面的语句将抛出 E_STRICT 错误:

<?php $classA =& new ClassA();?>

  删除了 zend.ze1_compatibility_mode

  zend.ze1_compatibility_mode 配置启用了与 Zend Engine V1 (PHP V4) 的兼容性,它是在 PHP V5 引入的,方便了从 PHP V4 迁移到 PHP V5。

  在 PHP V6 中,已经删除了 zend.ze1_compatibility_mode 特性,如果检测到该设置,将抛出 E_CORE_ERROR。

  删除了 Freetype 1 和 GD 1 库

  FreeType 1 和 GD 1 是老版本的字体呈现和图像处理库。它们不再受到维护,并且已被更新版本的 FreeType 和 GD 代替。在 PHP V6 中,删除了对 FreeType 1 和 GD 1 库的支持。

  默认情况下不启用 dl()

  dl (string $library) 函数用于在运行时加载 PHP 扩展。在 PHP V5 中,可以在 php.ini 配置文件中启用或禁用 dl() 函数:enable_dl = On。

  dl() 函数会给从未加载过的模块带来问题。dl() 函数不能在多线程服务器中正常工作,比如 IIS 或 Zeus,因为在这些服务器中会自动禁用它。不过 dl() 函数在 PHP Command Line Interface (CLI) Server Application Programming Interface (SAPI) 中非常有用。

  在 PHP V6 中,dl() 函数在默认情况下是禁用的,但并没有删除它。SAPI 层可能会显式地注册 dl() 函数。

  FastCGI 模式

  FastCGI 提供很高的性能,如果禁用,将导致杂乱的代码。在 PHP V6 中不能禁用 FastCGI。

  删除了 register_long_arrays

  当启用 register_long_arrays 配置选项时,将注册很长的超级全局变量 — $HTTP_*_VARS 变量。$HTTP_*_VARS 变量是在 PHP V5 中为了向后兼容性而引入的,但不是必要的。使用更短的变量 $_GET、$_POST 和 $_SERVER 代替它会更好。在新的 PHP 版本中,register_long_arrays 设置和 $HTTP_*_VARS 没有得到好评。

  在 PHP V6 中,删除了 register_long_arrays 设置和 $HTTP_*_VARS 全局变量,如果检测到 register_long_arrays,将抛出 E_CORE_ERROR。

  删除 break $var

  动态的 break 操作数不起作用,如以下示例所示:

 

  for (..) { $var = rand(1, 2); break $var; }

  在 PHP V6 中,删除了动态的 break 操作数。取而代之的是,您可以为 $var 分配一个数字,如下所示:

  for (..) { $var = rand(1, 2); break 1; }
0
相关文章