Pergunta

Em PHP, se você retornar uma referência a uma propriedade protegida/privada para uma classe fora do escopo da propriedade, a referência substituirá o escopo?

por exemplo.

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

}

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

Isso está correto e a barra do array está sendo passada por referência?

Foi útil?

Solução

Bem, seu código de exemplo não é PHP, mas sim, se você retornar uma referência a uma variável protegida, poderá usar essa referência para modificar os dados fora do escopo da classe.Aqui está um exemplo:

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

Quando este código é executado, o print_r() resultados mostrarão que os dados armazenados em $testObj->fooInstance foi modificado usando a referência armazenada em $testObj->barReference.No entanto, o problema é que a função deve ser definida como retornando por referência E a chamada também deve solicitar uma referência.Você precisa dos dois!Aqui está a página relevante do manual do PHP sobre isso:

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top