对象的方法是否应该能够访问同一类的另一个对象的受保护属性?
我在PHP编码,我刚刚发现一个对象的受保护属性允许被同一个类的方法访问,即使它不是同一个对象。
在该示例中,首先,您将在输出中获得“3” - 因为函数readOtherUser将成功访问该值 - 之后将发生PHP致命错误 - 因为主程序将无法访问相同的价值。
<?php
class user
{
protected $property = 3;
public function readOtherUser ()
{
$otherUser = new user ();
print $otherUser->property;
}
}
$user = new user ();
$user->readOtherUser ();
print $user->property;
?>
这是一个PHP错误还是预期的行为(我将不得不重新学习这个概念......))(并且有参考这个事实)?如何在其他编程语言中完成?
谢谢!
答案 0 :(得分:8)
这是有意的。甚至可以访问同一类的私有成员。因此,将修饰符视为类别修饰符,而不是对象修饰符。
PHP不是唯一具有此功能的语言。例如,Java也有这个。
答案 1 :(得分:2)
这是预期的行为。受保护的变量或函数意味着它可以由同一个类或从该类继承的任何类访问。受保护的方法只能从类中调用,例如你不能这样称呼它:
$object = new MyClass();
$object->myProtectedFunction();
这会给你一个错误。但是,从定义的类'MyClass'中,您可以完美地调用受保护的函数。
同样适用于变异。总结:
use PROTECTED on variables and functions when:
1. outside-code SHOULD NOT access this property or function.
2. extending classes SHOULD inherit this property or function.