为什么数组数据不能用于php魔术方法__call()?

时间:2016-09-30 13:44:05

标签: php oop

这是一个变量,它的输出如下:

$a = [2, 3, 4];  
echo implode(',', $a);

输出

2,3,4

我有一个使用php魔术方法__call

的课程
class MagicMethod {

    public function __call ( $pm, $values ) {
        echo "there is not <b>$pm</b> method <br/> and arguments are <br/>";
        echo implode(',', $values);
    }
}

$magic =  new MagicMethod;    
$magic->notExist( [2, 3, 54] );

现在它显示错误消息:

  

注意:

中的数组到字符串转换

为什么__call方法获取数组数据?

2 个答案:

答案 0 :(得分:3)

__call()的第二个参数是传递给方法的所有参数的数组。

来自PHP docs

  

$ name参数是被调用方法的名称。 $ arguments参数是一个枚举数组,包含传递给$ name'ed方法的参数。

在您的情况下,$values将是:

[
    [2, 3, 54]
]

您正在做的是在此数组上调用implode(),这会导致数组到字符串转换错误,因为[2, 3, 54]无法转换为字符串。

答案 1 :(得分:0)

<_> __call方法中的$ value是在notExist方法中传递的参数数组。

因此,传入notExist方法的数组将由$ values [0]访问。

请参阅以下代码。

class MagicMethod {

    public function __call ( $pm, $values ) {
        echo "there is not <b>$pm</b> method <br/> and arguments are <br/>";
        echo implode(',', $values[0]);
    }
}

$magic =  new MagicMethod;    
$magic->notExist( [2, 3, 54] );