2009-09-23 17 views
9

Hey there Mi chiedo come questo è fatto, come quando provo il seguente codice all'interno di una funzione di una classe che produce qualche errore di PHP che non posso prendereChiamare una classe all'interno di un'altra classe in PHP

public $tasks; 
$this->tasks = new tasks($this); 
$this->tasks->test(); 

non so il motivo per cui l'avvio della classe richiede $ questo come parametro sia: S

grazie

class admin 
{ 
    function validate() 
    { 
     if(!$_SESSION['level']==7){ 
      barMsg('YOU\'RE NOT ADMIN', 0); 
      return FALSE; 
     }else{ 
      **public $tasks;** // The line causing the problem 
      $this->tasks = new tasks(); // Get rid of $this-> 
      $this->tasks->test(); // Get rid of $this-> 
      $this->showPanel(); 
     } 
    } 
} 
class tasks 
{ 
    function test() 
    { 
     echo 'test'; 
    } 
} 
$admin = new admin(); 
$admin->validate(); 
+0

Che cosa significa "public $ tasks"? – brianreavis

+0

Ho pensato che fosse necessario creare un oggetto di un'altra classe in modo che la variabile in essa contenuta fosse pubblica ma non lo so. – Supernovah

risposta

22

non è possibile dichiarare i $ funzioni pubbliche all'interno del metodo la classe (funzione.) Se non è necessario utilizzare le attività oggetto al di fuori di tale metodo, si può semplicemente fare:

$tasks = new Tasks($this); 
$tasks->test(); 

Hai solo bisogno di utilizzare il "$ this->" quando la vostra utilizzando una variabile che si vuole essere a disposizione per tutta la classe.

I suoi due opzioni:

class Foo 
{ 
    public $tasks; 

    function doStuff() 
    { 
     $this->tasks = new Tasks(); 
     $this->tasks->test(); 
    } 

    function doSomethingElse() 
    { 
     // you'd have to check that the method above ran and instantiated this 
     // and that $this->tasks is a tasks object 
     $this->tasks->blah(); 
    } 

} 

o

class Foo 
{ 
    function doStuff() 
    { 
     $tasks = new tasks(); 
     $tasks->test(); 
    } 
} 

con il tuo codice:

class Admin 
{ 
    function validate() 
    { 
     // added this so it will execute 
     $_SESSION['level'] = 7; 

     if (! $_SESSION['level'] == 7) { 
      // barMsg('YOU\'RE NOT ADMIN', 0); 
      return FALSE; 
     } else { 
      $tasks = new Tasks(); 
      $tasks->test(); 
      $this->showPanel(); 
     } 
    } 

    function showPanel() 
    { 
     // added this for test 
    } 
} 
class Tasks 
{ 
    function test() 
    { 
     echo 'test'; 
    } 
} 
$admin = new Admin(); 
$admin->validate(); 
+0

non ha funzionato. Ho appena aggiornato la mia domanda con una copia più dettagliata del mio codice – Supernovah

+0

grazie per il lavoro che hai appena fatto :) – Supernovah

+0

Grazie Lance, lunedì e venerdì le cose più semplici sono state dimenticate, grazie per il promemoria ;-) – ChrisH

4

Non Sei problema è con questa riga di codice:

public $tasks; 
$this->tasks = new tasks(); 
$this->tasks->test(); 
$this->showPanel(); 

La parola chiave public viene utilizzata nella definizione della classe, non in un metodo della classe. In PHP, non hai nemmeno bisogno di dichiarare la variabile membro nella classe, puoi semplicemente fare $this->tasks=new tasks() e viene aggiunto per te.

Problemi correlati