扩展具有相同功能的类

时间:2012-11-11 19:26:19

标签: php codeigniter

如果我有一个具有索引函数的类,我将其扩展并创建另一个索引函数。扩展中的索引函数是否会覆盖父索引函数?另外,什么是parent :: __ construct()在构造中的第二个类中做了什么?

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

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

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

3 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分: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

因此,只有在index()

调用index()时,newClass中的index()方法才会覆盖someClass中的newClass方法

要回答第二个问题,parent::__construct()会在调用someClass时从newClass调用构造类。

答案 2 :(得分:0)

  

如果我有一个具有索引函数的类,我将其扩展并创建另一个索引函数。扩展中的索引函数是否会覆盖父索引函数?

是。如果您愿意,您需要在parent::index()的定义中致电newclass::index

  

另外,什么是parent :: __ construct()在构造的第二个类中完全做什么?

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

如果你不确定,如果父类有一个方法,或者没有(trait中的f.ex.),你可以在is_callable('parent::method')的方法中检查它。