在PHP中,如果将对protected / private属性的引用返回到属性范围之外的类,那么引用是否会覆盖范围?
e.g。
class foo
{
protected bar = array();
getBar()
{
return &bar;
}
}
class foo2
{
blip = new foo().getBar(); // i know this isn't php
}
这是正确的,是通过引用传递的数组条吗?
答案 0 :(得分:3)
嗯,您的示例代码不是PHP,但是,如果您返回对受保护变量的引用,则可以使用该引用来修改类范围之外的数据。这是一个例子:
<?php
class foo {
protected $bar;
public function __construct()
{
$this->bar = array();
}
public function &getBar()
{
return $this->bar;
}
}
class foo2 {
var $barReference;
var $fooInstance;
public function __construct()
{
$this->fooInstance = new foo();
$this->barReference = &$this->fooInstance->getBar();
}
}
$testObj = new foo2();
$testObj->barReference[] = 'apple';
$testObj->barReference[] = 'peanut';
?>
<h1>Reference</h1>
<pre><?php print_r($testObj->barReference) ?></pre>
<h1>Object</h1>
<pre><?php print_r($testObj->fooInstance) ?></pre>
执行此代码后,print_r()
结果将显示$testObj->fooInstance
中存储的数据已使用$testObj->barReference
中存储的引用进行了修改。但是,问题是必须将函数定义为通过引用返回,并且调用还必须请求引用。你需要它们两个!这是PHP手册中的相关页面: