加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

在PHP中,动态调用静态方法时,使用forward_static_call_array()而

发布时间:2020-12-13 13:59:29 所属栏目:PHP教程 来源:网络整理
导读:具体来说,比另一个更有效率? forward_static_call_array 和 call_user_func_array 之间有两个差异: 第一个仅存在于PHP 5.3之后 第一个必须从一个类里面调用 之后,我想有一些与Late 5.3静态绑定有关的差异. 实际上,如果你仔细看看给定的例子,似乎正是这样:
具体来说,比另一个更有效率?
forward_static_call_arraycall_user_func_array之间有两个差异:

>第一个仅存在于PHP 5.3之后
>第一个必须从一个类里面调用

之后,我想有一些与Late 5.3静态绑定有关的差异.

实际上,如果你仔细看看给定的例子,似乎正是这样:你所使用的类的“context”在forward_static_call_array中被保留在被调用的方法中.

考虑到这部分代码,这是从给定的例子派生的:

class A {
    const NAME = 'A';
    public static function test() {
        $args = func_get_args();
        echo static::NAME," ".join(',',$args)." n";      // Will echo B
    }
}

class B extends A {
    const NAME = 'B';
    public static function test() {
        echo self::NAME,"n";          // B
        forward_static_call_array(array('A','test'),array('more','args'));
    }
}

B::test('foo');

你会得到这个输出:

B
B more,args

即从类A中的方法中,您可以通过static ::关键字“知道”您“来自B”.

现在,如果你尝试用call_user_func做同样的事情:

class B extends A {
    const NAME = 'B';
    public static function test() {
        echo self::NAME,"n";          // B
        call_user_func_array(array('A','args'));
    }
}

(其余的代码不会改变)

你会得到这个输出:

B
A more,args

注意A在第二行!使用forward_static_call_array,你没有得到一个A,而是一个B.

这是区别:forward_static_call_array将静态上下文转发到调用的方法,而call_user_func_array则没有.

关于你的效率问题:我不知道 – 你必须进行基准测试;但这不是重点:关键在于这两个功能不会做同样的事情.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读