这是一个变量,它的输出如下:
$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
方法获取数组数据?
答案 0 :(得分:3)
__call()
的第二个参数是传递给方法的所有参数的数组。
来自PHP docs:
$ name参数是被调用方法的名称。 $ arguments参数是一个枚举数组,包含传递给$ name'ed方法的参数。
在您的情况下,$values
将是:
[
[2, 3, 54]
]
您正在做的是在此数组上调用implode()
,这会导致数组到字符串转换错误,因为[2, 3, 54]
无法转换为字符串。
答案 1 :(得分:0)
因此,传入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] );