Nun, Ihr Beispielcode ist nicht PHP, aber ja, wenn Sie einen Verweis auf eine geschützte Variable zurückgeben, können Sie diesen Verweis verwenden, um die Daten außerhalb des Bereichs der Klasse 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, die print_r()
Ergebnisse zeigen, dass die in $testObj->fooInstance
gespeicherten Daten modifiziert wurden unter Verwendung der Referenz gespeichert in $testObj->barReference
. Der Catch besteht jedoch darin, dass die Funktion so definiert werden muss, dass sie als Referenz zurückkehrt, und der Aufruf muss auch eine Referenz anfordern. Du brauchst sie beide! Hier ist die entsprechende Seite aus dem PHP-Handbuch auf, dass:
http://www.php.net/manual/en/language.references.return.php
ich nicht helfen, aber frage mich, warum Sie dies tun, oder wenn es auch eine gute Idee ist ... –
Vergib mir, aber die Verwendung eine öffentliche Variable und verliert die Notwendigkeit, den Zugriff auf eine geschützte Variable zu "hacken"? Was du machst, scheint eine ziemlich schlechte Idee zu sein ... Vielleicht, wenn du uns mehr von dem erzählst, was du erreichen wolltest, könnten wir einen guten Weg finden ... –
Dies ist eine sehr spezialisierte Instanz, wo ich brauche Zugriff auf diese Eigenschaft (zum Normalisieren der Datenbank in Bezug auf den Flatfile-Inhalt). Für die anderen 99/100-mal wird auf diese Eigenschaft zugegriffen, es ist besser, privat zu sein. – Karan