PHP 中类的继承和构造函数概念澄清

    PHP4.x 版本:

    PHP 4.x 的构造函数名与类名相同。
    子类的构造函数名与子类名相同(废话)。
    在子类里父类的构造函数不会自动执行。
    要在子类里执行父类的构造函数,必须执行类似以下语句:
      $this->[父类的构造函数名()]

    例如:

    class base1
    {
      function base1()
      {
        echo 'this is base1 construct';
      }
    }

    class class1 extends base1
    {
      function class1()
      {
        $this->base1();
        echo 'this is class1 construct';
      }
    }
    $c1 = new class1;

    PHP5.x 版本:

    PHP5.0 以上版本对类的功能进行了很大的扩充。类的构造函数统一命名为__construct()。
    子类的构造函数名也是__construct()(也是废话)。
    在子类里父类的构造函数会不会执行,分两种情况:
    1,如子类不定义构造函数 __construct(),则父类的构造函数默认会被继承下来,且会自动执行。
    2,如子类定义了构造函数 __construct(),因为构造函数名也是__construct(),所以子类的构造函数实际上是覆盖(override)了父类的构造函数。这时执行的是该子类的构造函数。
       这时如果要在子类里执行父类的构造函数,必须执行类似以下语句:

    parent::__construct();

    例如:

    class base2
    {
      function __construct()
      {
        echo 'this is base2 construct';
      }
      function __destruct()
      {
      }
    }

    class class2 extends base2
    {
      function __construct()
      {
        parent::__construct();
        echo 'this is class2 construct';
      }
    }

    注意 parent::__construct(); 语句不一定必须放在子类的构造函数中。放在子类的构造函数中仅仅保证了其在子类被实例化时自动执行。

    PHP4.0 和 5.0 类构造函数的兼容问题:

    在 PHP5.0 以上版本里,还兼容了 4.0 版本的构造函数的定义规则。如果同时定义了4.0的构造函数和 __construct()函数,则__construct() 函数优先。
    为了使类代码同时兼容 PHP4.0 和 5.0,可以采取以下的方式:

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

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

    $c3 = new class3;

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值