Frage

In PHP, wenn Sie geben einen Hinweis auf ein geschütztes / Privateigentum zu einer Klasse nicht in dem Anwendungsbereich der Immobilie ist die Referenz, den Umfangs außer Kraft setzen?

z.

class foo
{
  protected bar = array();
  getBar()
  {
    return &bar;
  }

}

class foo2
{
  blip = new foo().getBar(); // i know this isn't php
}

Ist das richtig und ist das Array bar als Referenz übergeben werden?

War es hilfreich?

Lösung

Nun, Ihr Beispielcode ist nicht PHP, aber ja, wenn Sie einen Verweis auf eine geschützte Variable zurückgeben, können Sie diese Referenz verwenden, um die Daten außerhalb der Klasse des Umfangs zu ändern. Hier ein Beispiel:

<?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>

Wenn dieser Code ausgeführt wird, werden die print_r() Ergebnisse zeigen, dass die in $testObj->fooInstance gespeicherten Daten modifiziert wurden unter Verwendung der in $testObj->barReference gespeicherten Referenz. Allerdings ist der Haken, dass die Funktion als Rückgabe als Referenz definiert werden muß, und der Anruf muss auch verlangen, einen Verweis. Sie müssen sie beide! Hier ist die entsprechende Seite aus dem PHP-Handbuch auf, dass:

http://www.php.net/manual/en /language.references.return.php

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top