【发布时间】:2017-06-14 03:31:04
【问题描述】:
就像标题说我对这段代码有问题:
abstract class AClass {
abstract protected function a1();
abstract protected function a2();
public function show() {
return $this->a1() . "<br>" . $this->a2();
}
}
class A1 extends AClass {
protected function a1() {
return 'A1a1';
}
protected function a2() {
return 'A1a2';
}
}
class A2 extends AClass {
protected function a1() {
return 'A2a1';
}
protected function a2() {
return 'A2a2';
}
}
class AA {
public function __construct() {
$a11 = new A1();
$a22 = new A2();
$this->inter($a11);
$this->inter($a22);
}
private function inter(AClass $class) {
echo $class->show();
}
}
$aa = new AA();
它在扔:
致命错误:从第 38 行 C:\xampp\htdocs\Learning\index.php 中的上下文“AA”调用受保护的 A1::a1()
第 38 行是这样的:
$a11 = new A1();
如果我不在该行调用 a1(),我不明白为什么会抛出该错误。
感谢和问候
哈维尔
【问题讨论】:
-
您使用的是少数几个支持从类命名的构造函数的 php 版本之一吗? php.net/manual/en/language.oop5.decon.php
-
我使用的是 PHP 5.6.20 版本,它看起来支持它们,是吗?
-
从您的代码看来是这样。你想要什么样的构造函数行为?
-
我正在测试抽象,因此我想测试由两个实现的父类中的公共无抽象方法调用的受保护方法。但我不知道为什么在 A1 构造函数 A1();正在调用 a1() 函数,如果我没有修改 A1 构造函数而不是 AClass 构造函数。
标签: php design-patterns abstract protected