2009-09-23 6 views
9

Hé là, je me demande comment cela se fait que lorsque je tente le code suivant dans une fonction d'une classe, il produit une erreur php que je ne peux pas attraperAppelez une classe dans une autre classe en PHP

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

Je ne sais pas pourquoi l'initiation de la classe nécessite $ ce en tant que paramètre soit: S

grâce

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

Qu'est-ce que 'public $ tasks '? – brianreavis

+0

Je pensais qu'il était nécessaire de créer un objet d'une autre classe que la variable qu'il contient soit publique mais je ne sais pas. – Supernovah

Répondre

22

Vous ne pouvez pas déclarer les tâches de $ publiques à l'intérieur de la méthode (fonction de votre classe.) Si vous n'avez pas besoin de utiliser les tâches objet en dehors de cette méthode, vous pouvez juste faire:

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

Vous avez seulement besoin d'utiliser le « $ this-> » lorsque votre utilisation d'une variable que vous voulez être disponible dans toute la classe.

Vos deux options:

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(); 
    } 

} 

ou

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

avec votre code:

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

cela n'a pas fonctionné. Je viens de mettre à jour ma question avec une copie plus verbeuse de mon code – Supernovah

+0

merci pour le travail que vous venez de faire :) – Supernovah

+0

Merci Lance, lundi et vendredi les choses les plus simples sont oubliées, merci pour le rappel ;-) – ChrisH

4

vous êtes problème est avec cette ligne de code:

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

Le mot-clé public est utilisé dans la définition de la classe et non dans une méthode de la classe. En PHP, vous n'avez même pas besoin de déclarer la variable membre dans la classe, vous pouvez simplement faire $this->tasks=new tasks() et il est ajouté pour vous.

Questions connexes