LAMP开发精要(1):让 PHP 类的构造函数兼容 4.0 和 5.0 版本

时间:2021-07-22 12:52:58

    PHP 的 4.0 和 5.0 版本对类的支持有很大的区别。在编写代码时,强烈建议不混用 4.0 和 5.0 的语法。

    但在某些情况下,可能需要考虑2代版本的兼容性。以下一段代码可以在 PHP 4.0 和 5.0 下同时运行,结果相同,兼顾了2个版本。

    原理:PHP5.0 对 4.0 的类的语法向下兼容。但如果 __construct() 和类名函数同时出现,则 __construct() 优先执行。但在 PHP4.0 版本里 __construct() 函数会被当作普通对待,不予理睬。

    所以,以下代码如果在 PHP5.0 环境下执行,会优先执行 __construct() 函数,忽略 class3()函数。
    如果在 PHP4.0 环境下执行,会优先执行 class3() 函数,忽略 __construct()函数,但class3() 函数又显式的调用了__construct()函数。
    所以在2种版本中,都自动执行了 __construct() 函数,达到了自动执行构造函数的目的。
    如果以下代码中使用了 4.0 不能识别的语法,比如 parent、self 等,则不能达到向上兼容的目的了。

    <?php
      //打开错误提示
      error_reporting(E_ALL|E_STRICT);

      class class3
      {
        function __construct() //for PHP5.0
        {
          echo 'this is class3 construct';
        }

        function class3() //for PHP4.0
        {
          $this->__construct();
        }
      }

      $c3 = new class3;
    ?>

    作者:张庆(网眼) 2010-4-1
    来自“网眼视界”:http://blog.why100000.com
    “十万个为什么”电脑学习网:http://www.why100000.com

    下篇预告:《LAMP开发精要(2):Wordpress 插件机制浅析》