在我的抽象类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()
的调用是来自孩子还是父母。
提前致谢。
答案 0 :(得分:0)
单行:受保护,因为您希望您的子类具有访问权限
可见性修饰符的工作方式如下:
$c = new My_Class_Extended(); $c->thisIsPublic();
。这不适用于私人或受保护的修饰符包含在内。因此受保护比公共受限制更严格,私有受限制比受保护更严格。
你想要受保护,因为你想在子类中调用它们,但不是在它之外。
顺便说一句:在您的上下文中,abstract关键字只能确保您无法从My_Class
创建实例。