2009-12-09 30 views
9

Ho il seguente (ridotta) Codice:Accesso variabile globale dall'interno di una classe

<?PHP 
    class A { 
     function Show(){ 
      echo "ciao"; 
     } 
    } 

    $a = new A(); 
    $b = new B(); 

    class B { 
     function __construct() { 
      $a->Show(); 
     } 
    } 
?> 

Con un po 'di sorpresa che non posso accedere al livello globale definita $ una variabile all'interno della classe e ottengo un Variabile non definita. Qualsiasi aiuto?

risposta

5

Perché la sorpresa? Questo è un problema di scope variabile piuttosto logico ...

Ti suggerisco di utilizzare la parola chiave global o la variabile $GLOBALS per accedere alla tua variabile.

EDIT: Quindi, nel tuo caso che sarà:

global $a; 
$a->Show(); 

o

$GLOBALS['a']->Show(); 

EDIT 2: E, dal momento che Vinko è giusto, vi consiglio di dare un'occhiata al manuale di PHP su variable scope.

+4

E 'sorprendente per persone abituate a linguaggi con ambito implicitamente ereditato, come C. –

+0

Gotcha, Vinko. Grazie. – Franz

6

È necessario definirlo come global variable all'interno dell'ambito della funzione a cui si desidera utilizzarlo.

function __construct() { 
    global $a; 
    $a->Show(); 
} 
18

Si prega di non utilizzare il metodo globale che viene proposto. Mi fa male lo stomaco

Passo $ una al costruttore di B.

class A { 
    function Show(){ 
      echo "ciao"; 
    } 
} 

$a = new A(); 
$b = new B($a); 

class B { 
    function __construct($a) { 
     $a->Show(); 
    } 
} 
+1

Questo è davvero il modo migliore. – Franz

+0

In questo esempio, perché wouldnt B estendere A? – roberthuttinger

+0

@roberthuttinger - tutto dipende dalla relazione tra le due classi. – Galen

0
<?php 
class A { 
    public function Show(){ 
     return "ciao"; 
    } 
} 

class B { 
    function __construct() { 
     $a = new A(); 
     echo $a->Show(); 
    } 
} 

$b = new B(); 
?> 
Problemi correlati