Có thể sử dụng phương pháp ma thuật __call
khi gọi các hàm tĩnh không?Sử dụng __call với các lớp tĩnh?
7
A
Trả lời
15
Chưa, phương pháp được đề xuất (hiện có sẵn) __callStatic
Docs trong kênh cuối cùng tôi biết. Nếu không, __call
và các phương thức ma thuật __
khác không có sẵn để sử dụng bởi bất kỳ thứ gì ngoài thể hiện của đối tượng.
8
Bạn phải sử dụng phương pháp ma thuật khác ma thuật, __callStatic
- tính năng này chỉ khả dụng trong PHP> = 5.3, chưa thực sự được phát hành.
0
Như đã mô tả trước đây, không có người gọi tĩnh ma thuật nào. Nhưng bạn có thể viết mã như sau:
class First {
public static function test1(){
return 1;
}
public static function test2(){
return 2;
}
}
class Second {
public static function test1(){
if(func_num_args()>0){
return func_get_args();
}
return 21;
}
public static function test2(){
return 22;
}
}
class StaticFactory {
public static function factory($class, $method){
if(func_num_args()>2){
$args = func_get_args();
array_shift($args);
array_shift($args);
return call_user_func_array(array($class,$method), $args);
}else{
return call_user_func_array(array($class,$method), array());
}
}
}
print_r(StaticFactory::factory("Second", "test1", 1, false, true));
print_r(StaticFactory::factory("First", "test1"));
Nhập để ghi chú chưa có sẵn. – David
Ah bugger - Tôi đã tự hỏi về điều này, và bắt đầu viết câu hỏi ... sau đó tôi tìm thấy __callStatic nhưng không nhận ra nó sẽ không có sẵn cho đến khi php 5.3 – nickf
Tôi đã không được vui mừng vì một "nhỏ" phát hành trong PHP kể từ khi ... Yeah PHP5.3 mang lại cho tôi hy vọng cho ngôn ngữ. – David