Php构造函数

PHP 5 允行开发者在一个类中定义一个方法作为构造函数。具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。
如果子类中定义了构造函数则不会隐式调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。如果子类没有定义构造函数则会如同一个普通的类方法一样从父类继承(假如没有被定义为 private 的话)。

事例1:父类构造函数无参数

<?php

class A {
    public $value = 'A';
    public function __construct() {
        echo 'A construct';
    }
}

class B extends A {}

$B = new B();

运行结果:A construct

事例2

<?php

class A {
    public $value = 'A';
    public function __construct($value) {
        $this->value = $value;
        echo $this->value;
    }
}

class B extends A { }

$B = new B('B');

运行结果:B

事例3

<?php

class A {
    public $value = 'A';
    public function __construct($value) {
        $this->value = $value;
        echo $this->value;
    }
}

class B extends A {  //B类中也定义了自己的构造函数
    public function __construct() {
        echo 'B construct';
    }
}

$B = new B();

运行结果:B construct

由上述三个事例可以看出,在子类进行实例化对象时,如果父类有构造函数,而子类无构造函数,则自动执行构造函数;若父类有构造函数,而子类也有构造函数,则会执行子类的构造函数。

那么,如果想要在子类有构造函数,父类也有构造函数时,两者都执行,该如何操作呢?请看事例5:

事例5

<?php

class A {
    public function __construct() {
        echo 'A construct';
    }
}

class B extends A {
    public function __construct() {
        //这里就要加上parent::__construct()或者A::__construct()来主动调用父类的构造函数
        parent::__construct();  
        echo 'B construct';
    }
}

$B = new B();

运行结果:A constructB construct

定义构造函数难道只能用__construct吗?大家肯定知道,还有就是可以使用和类名同名的命名方式来定义构造函数:

事例6

<?php

class A {
    public function A() {
        echo 'A construct';
    }
}

class B extends A {
    public function B() {
       //这里调用时,也可以使用A::__construct()或者A::A()来进行调用
        A::__construct();
        echo 'B construct';
    }
}

$B = new B();

运行结果:A constructB construct

这里还要情调的一点是,Php中,函数名是不区分大小写的,但是变量属性名是区分大小写的,大家不妨可以试一试,印象更深刻。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值