如果我有一个具有索引函数的类,我将其扩展并创建另一个索引函数。扩展中的索引函数是否会覆盖父索引函数?另外,什么是parent :: __ construct()在构造中的第二个类中做了什么?
class someclass
{
public function index()
{
//do something
}
}
class newclass extends someclass
{
function __construct()
{
parent::__construct();
}
public function index()
{
//do something
}
}
答案 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')
的方法中检查它。