2016-09-30 2 views
0

Вот переменная, и это выход следующее:Почему данные массива не работают над методом php magic __call()?

$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

Потому что вы даете ему массив? (** [2, 3, 54] ** => это массив). И после этого вы пытаетесь «эхо» массива, который затем приводит к преобразованию «Array to string ...» – Xatenev

+0

Поскольку вы передаете один аргумент, который оказывается массивом; поэтому внутри __call() это '$ values ​​[0]' .... use 'echo implode (',', $ values ​​[0]);' in your '__call()' method –

+0

php 'implode()' функции нужны 'array' данные из его 2-го аргумента, и я сделал это !! –

ответ

3

Второй аргумент __call() - это массив всех аргументов, переданных методу.

PHP docs От:

в $ имя аргумента имя вызываемого метода. Аргумент $ arguments - это перечисляемый массив, содержащий параметры, переданные методу $ name'ed.

В вашем случае $values будет:

[ 
    [2, 3, 54] 
] 

Что вы делаете вызов implode() на этом массиве, что приводит к массива для преобразования строки ошибка, потому что [2, 3, 54] не может быть преобразован в строку ,

0

$ values ​​в методе __call - массив аргументов, переданных в методе notExist.

Для массива, переданного в методе notExist, будут доступны значения $ [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]); 
Смежные вопросы