Ну, ваш пример кода не PHP, но да, если вы возвращаете ссылку на защищенную переменную, вы можете использовать эту ссылку для изменения данных вне области класса. Вот пример:
<code><?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) ?>
Object
<?php print_r($testObj->fooInstance) ?>
Когда этот код выполняется, результаты print_r()
покажут, что данные, хранящиеся в $testObj->fooInstance
, были изменены с использованием ссылки, хранящейся в $testObj->barReference
. Однако подвох заключается в том, что функция должна быть определена как возвращаемая по ссылке, и вызов также должен запрашивать ссылку. Вы нуждаетесь в них обоих! Вот соответствующая страница из руководства по PHP:
http://www.php.net/manual/en/language.references.return.php