2012-12-21 12 views
7

Sto solo giocando e ho trovato questo.Perché questo codice NON sta lanciando una nota PHP di proprietà non definita?

Perché la chiamata facendo riferimento a $this->newAxis() fa non gettare un avviso di proprietà non definita (xAxis proprietà), mentre il var_dump() fa?

public function newXAxis() 
{ 
    // var_dump(isset($this->xAxis)); // false 
    // var_dump($this->xAxis); // Throws the notice 
    return $this->newAxis($this->xAxis); // Should throw the notice?! 
} 

protected function newAxis(&$current) 
{ 
    // ... 
} 

Ha qualcosa a che fare con il passaggio per riferimento, quindi non accedere alla proprietà direttamente?

risposta

7

Sì, succede perché lo si passa per riferimento. Quando passi di valore, viene effettuato un tentativo di leggere effettivamente il valore della variabile, quindi viene visualizzato un avviso. Quando passi per riferimento, non è necessario leggere il valore.

Quando si esegue questa operazione, la variabile/proprietà viene creata se non esiste ancora.

Dal manual:

Se si assegna, passa, o restituire una variabile non definita per riferimento, otterrà creato .

<?php 
function foo(&$var) { } 
foo($a); // $a is "created" and assigned to null 
+0

Mi piace programmare perché impari sempre qualcosa di nuovo. Grazie per il riferimento al manuale. – gremo

-2

vado su un arto qui ...

Dal momento che si sta accedendo come un oggetto (da una classe) che non vi darà un avviso, mentre quando si var_dump qualcosa che tipo di accesso è come un array (e poiché è vuoto getta un avviso)

5
newAxis(&$current) 

è passaggio per riferimento. ciò significa che stai passando una variabile.

Per impostazione predefinita tutte le variabili in PHP non sono definite.

Si definiscono utilizzando semplicemente, ad es.

$a = 1; 

Come si può vedere, il PHP non si lamenta qui che $a è indefinito, giusto?

Va bene;), vedi qui:

$a = $b; 

PHP ora si lamenta che $b non è definito.

Come con $a (si definisce la variabile) e $b (la variabile non è definita) è con il passaggio per riferimento o per valore:

$this->newAxis($a); 

La variabile $a è definito quando viene passato per riferimento. Porta il valore predefinito NULL. E ora il $b esempio:

var_dump($b); 

var_dump prende il parametri per valore. Pertanto PHP lamenta che $b non è definito.

E questo è tutto. Spero sia stato abbastanza chiaro.

Problemi correlati