0

如果我有一个具有索引函数的类并且我扩展它并创建另一个索引函数。扩展中的索引函数会覆盖父索引函数吗?另外, parent::__construct() 在构造的第二个类中到底在做什么?

class someclass
{
    public function index()
    {
        //do something
    }
}

class newclass extends someclass
{
    function __construct()
    {
        parent::__construct();
    }

    public function index()
    {
        //do something
    }
}
4

3 回答 3

1

你可以做一些简单的测试

echo "<pre>";
$b = new B();
$b->index();

echo PHP_EOL;

$c = new C();
$c->index();

输出

A.A::__construct
B.B::index <-------------- Parent index overwrite 

A.A::__construct   <------ Still calls it anyway
A.A::index         <------ Calls A:index
C.C::index         <------ Calls B:index 

课程

class A {

    function __construct() {
        echo __CLASS__, ".", __METHOD__, PHP_EOL;
    }

    public function index() {
        echo __CLASS__, ".", __METHOD__, PHP_EOL;
    }
}
class B extends A {

    function __construct() {
        parent::__construct();
    }

    public function index() {
        echo __CLASS__, ".", __METHOD__, PHP_EOL;
    }
}
class C extends A {

    public function index() {
        parent::index();
        echo __CLASS__, ".", __METHOD__, PHP_EOL;
    }
}
于 2012-11-11T19:32:59.030 回答
0

代码将像这样工作:

$someClass = new someClass;
$newClass = new newClass;

$someClass->index(); //this will output what is written in the index function found in someClass
$newClass->index(); //this will output what is written in the index function found in newClass

所以newClass 中的方法只有在被调用时index()才会覆盖 someClass 中的方法index()index()newClass

要回答您的第二个问题,parent::__construct()将从someClass何时调用构造类newClass

于 2012-11-11T19:38:33.053 回答
0

如果我有一个具有索引函数的类并且我扩展它并创建另一个索引函数。扩展中的索引函数会覆盖父索引函数吗?

是的。如果你愿意,你需要调用 's 的parent::index()定义。newclass::index

另外, parent::__construct() 在构造的第二个类中到底在做什么?

这将导致 PHP 错误,因为您没有__construct在父类中定义方法。

如果您不确定父类是否有方法(例如在trait 中),您可以在方法中使用is_callable('parent::method').

于 2012-11-11T20:03:17.860 回答