L'ambito della proprietà PHP è stato sovrascritto passando come riferimento?

StackOverflow https://stackoverflow.com/questions/69564

  •  09-06-2019
  •  | 
  •  

Domanda

In PHP, se restituisci un riferimento a una proprietà protetta/privata a una classe al di fuori dell'ambito della proprietà, il riferimento sovrascrive l'ambito?

per esempio.

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

}

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

È corretto e la barra dell'array viene passata per riferimento?

È stato utile?

Soluzione

Bene, il tuo codice di esempio non è PHP, ma sì, se restituisci un riferimento a una variabile protetta, puoi utilizzare quel riferimento per modificare i dati al di fuori dell'ambito della classe.Ecco un esempio:

<?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 questo codice viene eseguito, il print_r() i risultati mostreranno che i dati memorizzati in $testObj->fooInstance è stato modificato utilizzando il riferimento memorizzato in $testObj->barReference.Tuttavia, il problema è che la funzione deve essere definita come restituzione per riferimento E la chiamata deve anche richiedere un riferimento.Ti servono entrambi!Ecco la pagina pertinente del manuale PHP a riguardo:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top