サンプルコードは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マニュアルの外にあります:
http://www.php.net/manual/en/language.references.return.php
私は助けるが、なぜあなたはこれをやっているだろうか、それも良いアイデアであれば... –
が私を許しますが、使用することはできませんパブリック変数であり、保護された変数へのアクセスを「ハックする」必要性を失いますか?あなたがやっていることは、かなり悪い考えのように思えるかもしれません...あなたが達成しようとしていたことの詳細を私たちに話したなら、それについてもっと良い方法を見つけることができました... –
これは、このプロパティにアクセスする(フラットファイルの内容に関連してdbを正規化するため)。他の99/100倍の場合は、このプロパティにアクセスし、プライベートである方が良いです。 – Karan