2009-09-23 44 views
9

Hey ở đó tôi đang tự hỏi thế nào điều này được thực hiện như khi tôi thử đoạn mã sau bên trong một hàm của một lớp nó tạo ra một số lỗi php mà tôi không thể bắtGọi một lớp bên trong một lớp khác trong PHP

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

tôi không biết lý do tại sao việc bắt đầu các lớp đòi hỏi $ này như một tham số hoặc là: S

nhờ

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

Công thức $ công khai là gì; trong đó có gì? – brianreavis

+0

Tôi nghĩ rằng nó đã được yêu cầu để tạo ra một đối tượng của một lớp khác mà biến nó được chứa bên trong được công khai nhưng tôi không biết. – Supernovah

Trả lời

22

bạn không thể tuyên bố nhiệm vụ public $ bên trong phương pháp của lớp học của bạn (chức năng.) Nếu bạn không cần sử dụng đối tượng nhiệm vụ bên ngoài phương thức đó, bạn chỉ có thể làm:

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

Bạn chỉ cần sử dụng "$ this->" khi bạn sử dụng biến mà bạn muốn có sẵn trong suốt lớp học.

bạn hai lựa chọn:

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

} 

hoặc

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

với mã của bạn:

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

nó không hoạt động. Tôi chỉ cập nhật câu hỏi của mình với bản sao chi tiết hơn mã của tôi – Supernovah

+0

cảm ơn vì công việc bạn đã làm :) – Supernovah

+0

Cảm ơn Lance, vào thứ hai và thứ sáu là những điều đơn giản nhất bị lãng quên, cảm ơn lời nhắc ;-) – ChrisH

4

Bạn đang có vấn đề là với dòng mã này:

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

Từ khóa public được sử dụng trong định nghĩa của lớp, không phải trong một phương thức của lớp. Trong php, bạn thậm chí không cần phải khai báo biến thành viên trong lớp, bạn chỉ có thể làm $this->tasks=new tasks() và nó được thêm vào cho bạn.

Các vấn đề liên quan