• 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;
  • 相关阅读:
    查看eclipse web项目中jsp编译后的servlet源文件【转】【JSP】
    综合实战--文件上传系统【JDBC&IO&Socket】
    002、使用webpack的各种loader处理文件
    001、node & webpack工程手动搭建
    000、GO之特别语法糖
    000、GO之深刻理解拷贝
    000、常见算法解析
    003、GO之并发
    002、GO之反射
    001、GO之指针转换
  • 原文地址:https://www.cnblogs.com/52php/p/5660041.html
Copyright © 2020-2023  润新知