call_user_func_array php7 替换,call_user_func_array的一个奇怪的问题。

问题已经被具体定义了,已经抽取成文件,文件下载链接。

精简问题

我封装了一个类,这个类(A)有个方法(f)。

这个方法A::f中通过call_user_func_array函数调用了另一个类(B)对象(b_obj)的方法(f),实际参数通过在A::f()中调用func_get_args()给call_user_func_array。

可结果在B::f()中收到的参数被嵌套了,不明白的话,具体的情况见下面的事例代码来说吧。

大家可以把下面这段代码复制执行后,得到的结果是正确的结果。我现在的一个实际的问题注释中写了

//Example:

class B

{

public function f($param1 = null)

{

var_dump($param1);

}

}

class A

{

private $obj = null;

public function __construct()

{

$this->obj = new B();

}

public function f()

{

return call_user_func_array(array($this->obj,__FUNCTION__),func_get_args());

}

}

$a_obj = new A();

$a_obj->f('name','zhangsan');

/**

*=======问题说明========

*

//结果实际的情况输出是这样的,现在这里的代码为精简,我说明情况用的

array(2){

0 => 'name',

1 => 'zhangsan',

}

//本来这种正常情况是这样的

string('name');

======================*/

请问这是怎么一回事?有人遇到过么?上面精简的代码我测试过了结果会是正常的。我的显示情况是这种的精简版,我也一层层调试了,不得其解。(在具体的代码如下)

具体

//first控制器中

public function v()

{

$view = new \core\View();

$view->assign('name','zhangsan');

}

//second View中

public function __call($method, $arguments)

{

/*

dump(array(

'method' => $method,

'args' => $arguments));

die();*/

// TODO: Implement __call() method.

if($this->instance &&

method_exists($this->instance,$method)

)

{

return call_user_func_array(array($this->instance,$method),$arguments);

}

}

//third 最底层了

public function assign($tpl_var, $value = null, $nocache = false)

{

dump(func_get_args());

die();

if (is_array($tpl_var)) {

foreach ($tpl_var as $_key => $_val) {

$this->assign($_key, $_val, $nocache);

}

} else {

if ($tpl_var != '') {

if ($this->_objType === 2) {

/** @var Smarty_Internal_Template $this */

$this->_assignInScope($tpl_var, $value, $nocache);

} else {

$this->tpl_vars[ $tpl_var ] = new Smarty_Variable($value, $nocache);

}

}

}

return $this;

}

//输出

array(2) {

[0] => string(4) "name"

[1] => string(8) "zhangsan"

}

array(1) {

[0] => array(2) {

[0] => string(4) "name"

[1] => string(8) "zhangsan"

}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值