2012-03-10 66 views
5

Mã sau hoạt động tốt.Làm thế nào để sử dụng call_user_func cho phương thức lớp tĩnh?

LibraryTests::TestGetServer(); 

Lấy loạt các chức năng trong LibraryTests và chạy chúng:

$methods = get_class_methods('LibraryTests'); 
foreach ($methods as $method) { 
    call_user_func('LibraryTests::' . $method . '()'); 
} 

này ném một lỗi: Warning: call_user_func(LibraryTests::TestGetServer()) [function.call-user-func]: First argument is expected to be a valid callback

Đây là lớp học mà được gọi là:

class LibraryTests extends TestUnit { 

    function TestGetServer() { 
     TestUnit::AssertEqual(GetServer(), "localhost/"); 
    } 
    . 
    . 
    . 

Cách khắc phục?

Làm việc với PHP 5.2.8.

+0

Không nối thêm '()' nếu hàm không có tham số – m13r

Trả lời

11

Hoặc (như của PHP 5.2.3):

$methods = get_class_methods('LibraryTests'); 
foreach ($methods as $method) { 
    call_user_func('LibraryTests::' . $method); 
} 

Hoặc (trước đó):

$methods = get_class_methods('LibraryTests'); 
foreach ($methods as $method) { 
    call_user_func(array('LibraryTests', $method)); 
} 

Xem call_user_func­DocsCallback Pseudo-Type­Docs.

+0

Bạn cần có một cuộc gọi lại hợp lệ để hoạt động. Nếu bạn đặt các giá trị không hợp lệ vào '$ method', nó không hoạt động. Nếu bạn đặt các giá trị hợp lệ vào đó, nó sẽ hoạt động. Hãy cẩn thận rằng đây chỉ là cho các phương thức lớp tĩnh. – hakre

+0

Cả hai đều ném '... [function.call-user-func]: Đối số đầu tiên được mong đợi là một cuộc gọi lại hợp lệ trong ...' –

+0

Vâng, trước hết hãy xác định mehtod là tĩnh trong lớp của bạn: 'static function TestGetServer '- hoặc làm việc trên một cá thể lớp với ký hiệu mảng. Tôi liên kết hai trang từ hướng dẫn có chứa rất nhiều thông tin và ví dụ và sẽ dẫn bạn cách để bạn có thể giải quyết vấn đề theo bất kỳ cách nào phù hợp với nhu cầu của bạn. – hakre

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