Nó là hoàn toàn OK - nhưng lưu ý rằng bạn phải vượt qua một đối tượng mà là một thể hiện của lớp học của bạn, để cho biết mà phản đối phương pháp không tĩnh được gọi là:
class MyClass {
public function hello() {
echo "Hello, World!";
}
}
$a = new MyClass();
call_user_func(array($a, 'hello'));
Bạn không nên sử dụng một cái gì đó như thế này:
call_user_func('MyClass::hello');
Mà sẽ cung cấp cho bạn những cảnh báo sau đây:
Strict standards: `call_user_func()` expects parameter 1 to be a valid callback,
non-static method `MyClass::hello()` should not be called statically
(Điều này sẽ làm việc hoàn toàn tốt đẹp nếu phương pháp này đã được khai báo là tĩnh ... nhưng nó không phải là, ở đây)
Để biết thêm thông tin, bạn có thể có một cái nhìn tại phần callback của cuốn cẩm nang, trong đó nêu, giữa những thứ khác (trích dẫn):
một phương pháp của một đối tượng cụ thể được thông qua như là một mảng chứa một đối tượng ở chỉ số 0 và tên phương pháp tại index 1.
Nếu bạn nhận được một lỗi nghiêm ngặt với PHP 5.2 và không phải với PHP 5.3, nó có thể là một vấn đề cấu hình - Tôi đang suy nghĩ về các chỉ thị error_reporting
.
Lưu ý rằng E_ALL
không bao gồm E_STRICT
(quoting):
E_ALL
: Tất cả lỗi và cảnh báo, như hỗ trợ, ngoại trừ mức E_STRIC
T.
Nguồn
2010-04-14 19:31:53
Bạn sẽ nhận được cảnh báo tương tự trên PHP5.3. Có vẻ như cấu hình php5.3 và php5.2 của bạn khác nhau. Có một cái nhìn tại 'error_reporting'. – vooD