2009-09-23 19 views
9

Hola Me pregunto cómo se hace esto como cuando intento el siguiente código dentro de una función de una clase que produce algún error php que no puedo cogerLlame a una clase dentro de otra clase en PHP

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

no sé por qué el inicio de la clase requiere $ esto como un parámetro, o bien: S

gracias

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é es 'public $ tasks;' allí? – brianreavis

+0

Pensé que era necesario crear un objeto de otra clase en el que la variable contenida fuera pública, pero no lo sé. – Supernovah

Respuesta

22

no se puede declarar las tareas $ públicas dentro de su método de clase (función.) Si no necesitas utilizan las tareas objeto fuera de ese método, sólo se puede hacer:

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

Sólo tiene que utilizar el "$ this->" cuando el uso de una variable que desea que esté disponible en toda la clase.

Sus dos opciones:

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 su código:

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

no funcionó. Acabo de actualizar mi pregunta con una copia más detallada de mi código – Supernovah

+0

gracias por el trabajo que acabo de hacer :) – Supernovah

+0

Gracias Lance, el lunes y el viernes se olvidan las cosas más simples, gracias por el recordatorio ;-) – ChrisH

4

Usted es el problema es con esta línea de código:

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

La palabra clave public se usa en la definición de la clase, no en un método de la clase. En php, ni siquiera necesita declarar la variable miembro en la clase, puede simplemente hacer $this->tasks=new tasks() y se agrega para usted.

Cuestiones relacionadas