2009-01-27 8 views

Trả lời

15

Chưa, phương pháp được đề xuất (hiện có sẵn) __callStaticDocs 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ập để ghi chú chưa có sẵn. – David

+0

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

+0

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

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"));