Question

En PHP, si vous renvoyez une référence à une propriété protected / private à une classe en dehors de la portée de la propriété, la référence remplace-t-elle la portée?

p. ex.

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

}

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

Est-ce correct et la barre de matrice est-elle passée par référence?

Était-ce utile?

La solution

Bien, votre exemple de code n'est pas PHP, mais 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 résultats print_r () indiquent que les données stockées dans $ testObj- > fooInstance ont été modifiées à l'aide de la référence stockée dans < code> $ 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 avez besoin des deux! Voici la page pertinente du manuel PHP à ce sujet:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top