zoukankan      html  css  js  c++  java
  • php 4.X与5.x版本构造函数区别与类的继承

    今天看ecshop源码的时候发现 构造函数是和类名一样,以前没接触过,一下子疑惑啦

    HP4.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()。
        在子类里父类的构造函数会不会执行,分两种情况:
        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;

  • 相关阅读:
    可视化工具D3.js教程 入门 (第十三章)—— 树状图
    可视化工具D3.js教程 入门 (第十二章)—— 力导向图
    可视化工具D3.js教程 入门 (第十一章)—— 饼图
    可视化工具D3.js教程 入门 (第十章)—— 交互式操作
    vue滑动页面选中标题,选中标题滚动到指定区域
    Vue样式穿透
    操作系统:进程和线程+进程的通讯方式
    客户端与服务端长连接的几种方式
    前端性能优化的 24 条建议(2020)-收藏
    idea中修改git提交代码的用户名
  • 原文地址:https://www.cnblogs.com/jiechn/p/3993054.html
Copyright © 2011-2022 走看看