我为你准备了这段php代码:
<?php
class A{
public function __construct(){
$var1=$this->B1();
$var2=$this->C1();
echo 'var1: '.$var1.'<br>var2: '.$var2;
}
}
class B extends A{
protected function B1(){
return 'b1';
}
}
class C extends A{
protected function C1(){
return 'c1';
}
}
new C();
?>
显然,如果我在第4行修改:
$var1=$this->B1();
$var1=$this->C1();
我得到这样的结果:
var1: c1
var2: c1
但是我想从C中访问B1()并获得这个结果:
var1: b1
var2: c1
并解决这个错误:"致命错误:在file.php第4行调用未定义的方法C::B1() ".
Thanks to all
如果你想要一个不同类的行为,你应该从那个类扩展。所以C
有C1()
和B1()
。
但是你又想要B
中C
的行为。所以B
应该包含C1
和B1
。生成的类将同时具有C1()
和' B1()。
现在你应该推广它们。将它们移动到父类A
。
class A{
public function __construct(){
$var1=$this->B1();
$var2=$this->C1();
echo 'var1: '.$var1.'<br>var2: '.$var2;
}
protected function B1(){
return 'b1';
}
protected function C1(){
return 'c1';
}
}
class B extends A{}
class C extends A{}
new C();
<?php
class C {
protected function C1()
{
return 'c1';
}
}
class B extends C
{
protected function B1()
{
return 'b1';
}
}
class A extends B
{
public function __construct()
{
$var1=$this->B1();
$var2=$this->C1();
echo 'var1: '.$var1.'<br>var2: '.$var2;
}
}
new A;
?>