我有这个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
并解决此错误: “致命错误:在第4行的file.php中调用未定义的方法C :: B1()。”
感谢所有
答案 0 :(得分:1)
如果您想要一个不同类的行为,您应该从该类扩展。因此C
将C1()
和B1()
。
但是你想要C
中的B
行为。因此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();
答案 1 :(得分:0)
<?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;
?>