就像标题一样,我对此代码有疑问:
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(),为什么会抛出该错误。
感谢致敬
哈维尔
在第38行,您创建了类A1的实例,因此调用了构造函数:它function a1()
在第15行。由于类名不区分大小写,因此构造函数名也是如此。
由于构造函数受到保护,因此不能从类外部调用它。也许您可以创建一个公共静态函数,在不实例化的情况下调用它,并且可以在其内部调用构造函数。这可能对Singleton类设计模式很有用。
如果只想使用常规方法测试抽象,则只需重命名函数即可,因此它们将不是构造函数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句