2012-07-19 28 views
12

Tôi gặp sự cố trong PHP. Trong file php của tôi, tôi đã tạo ra dòng sau:Làm thế nào để thực hiện nhiều cuộc gọi đến các phương thức lớp trong cùng một dòng?

$foo = $wke->template->notify() 
        ->type("ERROR") 
        ->errno("0x14") 
        ->msg("You are not logged.") 
        ->page("login.tpl"); 

Cuối cùng, tôi cần biến $foo tôi sẽ trở lại này:

$foo->type = "ERROR" 
$foo->errno= "0x14" 
$foo->msg= "You are not logged." 
$foo->page= "login.tpl" 

Xin lưu ý rằng $wke->template là nơi tôi cần gọi notify() phần tử.

+2

Câu hỏi đặt ra là không rõ ràng. Giải thích ý định ban đầu của bạn chỉ bằng các từ – zerkms

+0

Tại sao bạn nhấn mạnh vào việc thực hiện nó trong một dòng? bạn nên làm điều đó trong các cuộc gọi riêng biệt! – alfasin

+0

Cảm ơn bạn đã trả lời. Tôi cần tạo một phương thức để xây dựng một biến với tất cả các thông tin tôi cần. Tôi cần phải được tùy chỉnh tất cả các phương pháp được gọi là để làm những việc cụ thể và, trong cùng một thời gian, trả lại tất cả các thông tin tôi cần. – DrSAS

Trả lời

30

Cách gọi hàm của từng lớp chỉ bằng "->" vì hàm trả về cùng một đối tượng của lớp. Xem ví dụ bên dưới. Bạn sẽ có được điều này

class Wke { 

    public $type; 
    public $errno; 
    public $msg; 
    public $page; 

    public $template = $this; 

    public function notify(){ 
     return $this; 
    } 

    public function errorno($error){ 
     $this->errno = $error; 
     return $this; // returning same object so you can call the another function in sequence by just -> 
    } 
    public function type($type){ 
     $this->type = $type; 
     return $this; 
    } 
    public function msg($msg){ 
     $this->msg = $msg; 
     return $this; 
    } 
    public function page($page){ 
     $this->page = $page; 
     return $this; 
    } 
} 

Toàn bộ kỳ diệu là return $this;

+0

Nó đã hoạt động! Cảm ơn bạn! – DrSAS

+0

vui lòng bỏ phiếu. –

+0

Hiện tại tôi không thể. Tôi không có quyền bỏ phiếu Xin lỗi (không đủ danh tiếng): s – DrSAS

1

Mỗi phương pháp trong số đó sẽ cần trả lại một số đối tượng lưu trữ những gì bạn đặt làm đối số trong đó. Có lẽ, nó sẽ là template có chứa mỗi thuộc tính đối tượng trên nó, và khi bạn gọi phương thức nó đặt biến tương ứng và trả về chính nó.

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