【发布时间】:2011-04-19 08:29:08
【问题描述】:
我有 2 个扩展 A 的类 A 和 B。A 有一个公共属性,我希望在 B 的实例上无法访问该属性。我试着解释得更好:
class A
{
public $prop;
}
class B extends A
{
...
}
$instance=new B;
$instance->prop; //This must throw an error like "Undefined property prop"
我尝试使用 final 关键字,但它仅适用于方法而不适用于属性。我还尝试在 B 上设置与 private 相同的属性,但 PHP 不允许将访问级别从公共更改为私有或受保护。
也许这个问题有一个简单的解决方案,但我找不到,所以你知道怎么做吗?
【问题讨论】:
-
你在扩展别人的课程吗?为什么不能从根源上解决问题?
-
为什么要将属性声明为公共的(即尽可能广泛的可见性),然后拒绝其访问后代类?
-
我不想将私有财产设为公共财产,我希望 B 不会继承它。我更改了访问级别只是为了找到一个好的解决方案,但它不起作用
-
好吧,我不想这么说,但我认为你做错了。继承是当您想要使用子内部的所有底层父类时。如果你不这样做,那么要么你的架构搞砸了(孩子真的不应该扩展父母),或者你的问题最好使用另一种模式来解决(比如composition)......
标签: php class inheritance properties