php 静态方法 好处,在PHP中,动态调用静态方法时,使用forward_static_call_array()而不是call_user_func_array()有什么好处吗?...

forward_static_call_array和

call_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', 'test'), array('more', 'args'));

}

}

(其余的代码不会改变)

你会得到这个输出:

B

A more,args

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值