class Test
{
private $private = "";
public function add($string) {
$this->private[] = $string;
}
public function evaluate(Test $container) {
return $container->private;
}
}
$test = new Test();
$test->add("zero");
$test->add("one");
$test->add("two");
$result = new Test();
print_r($result->evaluate($test));
上面的代码演示了私有字符串的转储,这怎么可能? 那么,为什么它被称为“私人”?
任何人都可以向我解释这个吗?
输出:
Array (
[0] => one
[1] => two
[2] => four
)
答案 0 :(得分:2)
因为您正在从类中调用该私有属性。 private
表示它只能由其自己的类中的属性和方法使用。您调用一个允许使用该属性的方法。私有属性可以通过它的类访问,即使它是类的不同实例。
您会找到以下内容:
print_r($result::$private);
会给你错误:
致命错误:无法访问私有财产
答案 1 :(得分:1)
private
表示对任何相同类型的对象都是私有的。
作为stated here in the PHP manual:
相同类型的对象可以访问彼此私有和受保护的成员,即使它们不是相同的实例。
是的,它与其他一些语言不同,但它有记录,这就是它的工作方式。
答案 2 :(得分:0)
这是因为即使attribute $private
是私有的,Test类仍然知道它并且可以访问它,即使它是一个不同的实例。如果您要创建具有相同evaluate method
的第二个类Test2(),它需要Test
实例,那么evaluate将失败。这有点棘手,但是Test类甚至从远程实例也知道它的所有成员。
答案 3 :(得分:0)
public function evaluate
是公共的,它可以访问类中的私有变量。您无法直接访问公共变量,例如$result->$private
答案 4 :(得分:0)
是私有的,因为您无法在课堂外访问此变量/成员。