为什么以下代码打印出10而不是null?

时间:2014-01-29 13:36:31

标签: php oop

以下代码输出10。那是为什么?

<?php 

class a{
    var $c;

    public function a(){
        $this->c=10;
    }
}

class b extends a{

    public function print_a(){
        print $this->c;
    }
}

$b=new b;
$b->print_a();

3 个答案:

答案 0 :(得分:7)

因为public function a()是构造函数。

  

为了向后兼容,如果PHP 5找不到给定类的__construct()函数,并且该类没有从父类继承,它将搜索旧式构造函数,其名称为类。

PHP constructor manual

了解详情

答案 1 :(得分:3)

在旧版本的PHP中public function a被视为class a构造函数。由于class b中没有构造函数,因此调用class a构造函数并将$c设置为10;

答案 2 :(得分:2)

嗯,你实际上将你的函数命名为与类相同的名字,这是一个隐式构造函数。所以简而言之,它与__construct()相同。

在OOP中你必须记住,如果扩展一个类,那么在创建一个新实例时会隐式调用它的父构造函数,除非你明确地覆盖了构造函数。