PHP プロパティのスコープは参照として渡すことでオーバーライドされますか?
質問
PHP では、保護された/プライベート プロパティへの参照をプロパティのスコープ外のクラスに返すと、その参照はスコープをオーバーライドしますか?
例えば
class foo
{
protected bar = array();
getBar()
{
return &bar;
}
}
class foo2
{
blip = new foo().getBar(); // i know this isn't php
}
これは正しく、配列バーは参照によって渡されていますか?
解決
サンプル コードは 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
所属していません StackOverflow