在我的抽象类My_Class
中,我有一个方法My_Class::foo()
是从属于该类的另一个方法中调用的。例如:
abstract class My_Class {
function foo() {
// Stuff.
}
function bar() {
$this->foo();
}
// More methods etc...
}
现在,我正在扩展我的抽象类。例如:
class My_Class_Extended extends My_Class {
}
如您所知,My_Class::foo()
和My_Class::bar()
都由My_Class_Extended
继承。
我从不希望My_Class::foo()
在My_Class
或My_Class_Extended
之外被召唤,所以我知道不要让它的可见性public
。我的问题是,我不确定是使其可见性protected
还是private
。
我的问题
考虑到我在上述情况下如何称呼My_Class::foo()
,它应该protected
还是private
?我不确定对My_Class::foo()
的调用是来自子类还是父类。
提前谢谢。
单行:受保护,因为您希望子类具有访问权限
可见性修饰符的工作方式如下:
- 公共:从任何地方都可以看到。
-
-
$c = new My_Class_Extended(); $c->thisIsPublic();
.这不适用于私有或受保护
-
- 受保护:在类及其子类内部可见
-
- 只能在属于派生自父类的类或父类本身的函数中调用这些函数。
- private:仅对定义它的类可见。不能在子类中调用私有函数,也不能在类外部调用私有函数。
修饰符按包含顺序排序。因此,受保护比公共更严格,私有比受保护更严格。
您希望受到保护,因为您希望在子类内部调用它们,但不要在子类外部调用它们。
顺便说一句:在您的上下文中,abstract 关键字只能确保您无法从 My_Class
创建实例。