将 __call 与静态类一起使用?

发布于 2024-07-12 22:57:42 字数 33 浏览 4 评论 0原文

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

Is it possible to use the __call magic method when calling functions statically?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我三岁 2024-07-19 22:57:43

还没有,有一个提议(现已可用)__callStaticDocs 我最后知道的管道中的方法。 否则,除了对象实例之外,__call 和其他 __ 魔术方法无法供任何其他对象使用。

Not yet, there is a proposed (now available) __callStaticDocs method in the pipeline last I knew. Otherwise __call and the other __ magic methods are not available for use by anything but the instance of a object.

新雨望断虹 2024-07-19 22:57:43

您必须使用其他魔术方法,__callStatic- 这仅在 PHP >= 5.3 中可用,实际上尚未发布。

You have to use the other magic method, __callStatic - this is only available in PHP >= 5.3, which hasn't actually been released yet.

菩提树下叶撕阳。 2024-07-19 22:57:43

如前所述,不存在神奇的静态调用者。 但你可以这样编码:

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

As described before, there is no magic static caller. But you can code like this:

   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"));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文