#php #oop
#php #ооп
Вопрос:
Вот переменная, и ее вывод выглядит следующим образом :
$a = [2, 3, 4];
echo implode(',', $a);
Вывод
2,3,4
И
У меня есть класс с php magic method __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
метод получает данные массива?
Комментарии:
1. Потому что вы даете ему массив? ( [2, 3, 54] => это массив). И после этого вы пытаетесь
echo
использовать массив, что затем приводит к «преобразованию массива в строку …»2. Потому что вы передаете один аргумент, который оказывается массивом; поэтому внутри __call() он
$values[0]
… используетсяecho implode(',', $values[0]);
внутри вашего__call()
метода3.
implode()
функции php нужныarray
данные ее 2-х аргументов, и я это сделал!!4. @Xatenev Я повторяю массив с
implode
помощью функции!5. echo implode(‘,’, $values);
Ответ №1:
Второй аргумент __call()
— это массив всех аргументов, которые были переданы методу.
Из PHP docs:
Аргумент $name — это имя вызываемого метода. Аргумент $arguments — это перечислимый массив, содержащий параметры, переданные методу $name’ed.
В вашем случае $values
было бы:
[
[2, 3, 54]
]
То, что вы делаете, вызывает implode()
этот массив, что приводит к ошибке преобразования массива в строку, поскольку [2, 3, 54]
не может быть преобразовано в строку.
Ответ №2:
$values в методе __call — это массив аргументов, переданных в методе 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] );