Eh bien, votre exemple de code n'est pas PHP, mais oui, si vous renvoyez une référence à une variable protégée, vous pouvez utiliser cette référence pour modifier les données en dehors de la portée de la classe. Voici un exemple:
<?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>
Lorsque ce code est exécuté, les print_r()
résultats montreront que les données stockées dans $testObj->fooInstance
a été modifié en utilisant la référence stockée dans $testObj->barReference
. Cependant, le problème est que la fonction doit être définie comme renvoyant par référence, ET l'appel doit également demander une référence. Vous en avez besoin tous les deux! Voici la page de manuel PHP sur ce point:
http://www.php.net/manual/en/language.references.return.php
Je ne peux pas empêcher de se demander pourquoi vous faites cela, ou si elle est même une bonne idée ... –
Pardonnez-moi, mais l'utilisation une variable publique et perd le besoin de "pirater" l'accès à une variable protégée? Ce que vous faites semble être une assez mauvaise idée ... Peut-être que si vous nous en disiez plus sur ce que vous essayiez d'accomplir, nous pourrions trouver un bon moyen d'y arriver ... –
Ceci est un exemple très spécialisé où j'ai besoin pour accéder à cette propriété (pour normaliser la base de données par rapport au contenu du fichier plat). Pour les autres 99/100 fois cette propriété est accessible, il vaut mieux être privé. – Karan