【问题标题】:Using __call with static classes?将 __call 与静态类一起使用?
【发布时间】:2009-01-27 02:42:09
【问题描述】:

静态调用函数时可以使用__call魔术方法吗?

【问题讨论】:

    标签: php oop static magic-methods


    【解决方案1】:

    还没有,据我所知,管道中有一个提议的(现在可用的)__callStaticDocs 方法。否则,__call 和其他 __ 魔术方法只能由对象实例使用。

    【讨论】:

      【解决方案2】:

      您必须使用 other 魔术方法,__callStatic - 这仅适用于 PHP >= 5.3,尚未真正发布。

      【讨论】:

      • 导入以注意尚不可用。
      • Ah bugger - 我想知道这个,并开始写这个问题......然后我找到了 __callStatic 但没有意识到它直到 php 5.3 才可用
      • 我对 PHP 的“次要”版本没有那么兴奋了……是的,PHP5.3 给了我对这种语言的希望。
      • 我知道这是一个老问题,但我只想指出 __callStatic 可用 >= 5.3 (Not > 5.3) 不确定是否有人对此感到困惑,但我是。
      【解决方案3】:

      如前所述,没有神奇的静态调用者。但是你可以这样编码:

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

      【讨论】:

        猜你喜欢
        • 2011-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-12
        • 1970-01-01
        相关资源
        最近更新 更多