jon*_*tyc 27 php inheritance abstraction
以下代码将使PHP不高兴,customMethod()是私有的.为什么会这样?可见性是由声明某事物而非定义的地方决定的吗?
如果我想使customMethod仅对Template类中的样板代码可见并防止它被覆盖,那么我是否会将其保护并最终?
的template.php:
abstract class Template() {
abstract private function customMethod();
public function commonMethod() {
$this->customMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
CustomA.php:
class CustomA extends Template {
private function customMethod() {
blah...
}
}
Run Code Online (Sandbox Code Playgroud)
Main.php
...
$object = new CustomA();
$object->commonMethod();
..
Run Code Online (Sandbox Code Playgroud)
Tes*_*rex 45
抽象方法不能是私有的,因为根据定义它们必须由派生类实现.如果你不希望它public,它需要protected,这意味着它可以被派生类看到,但没有其他人.
关于抽象类的PHP手册向您展示了protected以这种方式使用的示例.
如果你担心会customMethod在课堂外被叫到,CustomA你可以参加CustomA课堂final。
abstract class Template{
abstract protected function customMethod();
public function commonMethod() {
$this->customMethod();
}
}
final class CustomA extends Template {
protected function customMethod() {
}
}
Run Code Online (Sandbox Code Playgroud)