2009-09-23 20 views
9

Cześć Zastanawiam się w jaki sposób odbywa się to jako kiedy próbuję następujący kod wewnątrz funkcji klasy produkuje niektóre błąd php, które nie mogę złapaćZadzwoń klasy wewnątrz innej klasy w PHP

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

nie wiem dlaczego wszczęcie klasy wymaga $ to jako parametr: S

dzięki

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

Co to są 'public $ tasks;' in there for? – brianreavis

+0

Myślałem, że wymagane jest stworzenie obiektu innej klasy, którego zmienna jest zawarta w celu publicznego, ale nie wiem. – Supernovah

Odpowiedz

22

nie można zadeklarować zadań publicznych $ wewnątrz metody w klasie (funkcja.) Jeśli nie musisz używać obiektu zadania poza tą metodą, można po prostu zrobić:

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

tylko trzeba użyć „$ this->” kiedy używasz zmiennej, które mają być dostępne w całej klasie.

Twoje dwie opcje:

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

} 

lub

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

z kodem:

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

to nie działa. Właśnie zaktualizowałem swoje pytanie z bardziej szczegółową kopią mojego kodu – Supernovah

+0

dzięki za pracę właśnie zrobiliście :) – Supernovah

+0

Dzięki Lance, w poniedziałek i piątek najprostsze rzeczy są zapomniane, dzięki za przypomnienie ;-) – ChrisH

4

jesteś problem jest z tej linii kodu:

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

Słowo kluczowe public jest używane w definicji klasy, a nie w metodzie klasy. W php nie musisz nawet deklarować zmiennej członkowskiej w klasie, możesz po prostu zrobić $this->tasks=new tasks() i zostanie ona dodana.