PHP プロパティのスコープは参照として渡すことでオーバーライドされますか?

StackOverflow https://stackoverflow.com/questions/69564

  •  09-06-2019
  •  | 
  •  

質問

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top