2010-08-11 27 views
15

Nếu tôi đang quá tải phương thức __call trong lớp PHP, làm thế nào tôi có thể gọi phương thức thực nếu mã của tôi không làm điều gì khác? Ví dụ:PHP Cách gọi cha mẹ :: __ call() và chuyển vào đối số

public function __call($name, $arguments) 
{ 
    if($name == 'tom') 
    { 
     $this->doName($name); 
    } 
    else 
    { 
     // Something here to carry on the __call maybe: 
     // $this->$name($arguments); 
    } 
} 

Vấn đề là các $arguments được chuyển qua như một mảng, làm thế nào tôi có thể tiếp tục vượt qua chúng thông qua thông tin $this->$name($arg, $arg, $arg ...) là có một cách đúng đắn để làm điều này?

Trả lời

18

Bạn có thể gọi:

return parent::__call($name, $arguments); 

Hoặc tôi hiểu lầm những gì bạn đang yêu cầu?

Edit:

Và nếu bạn có nghĩa là bạn muốn gọi $this->$name() để cố gắng kích hoạt parent::__call(), nó sẽ không làm việc. Bạn sẽ cuộn lên trong một vòng lặp vô hạn cho đến khi ngăn xếp tràn và sự cố php (nói cách khác, nó là xấu) ...

+0

Heh! Hoàn toàn không bao giờ nghĩ về điều đó! : D – tarnfeld

6

Bạn có thể sử dụng này:

call_user_func_array("self::method", $parameters) 
+0

cảm ơn ví dụ, tôi đã không phải truy cập php.net :) – Marecky

+0

cảm ơn bạn soooooo nhiều –

+0

Điều này sẽ làm việc ony trên phương pháp tĩnh .... – igaster

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