[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Почему __call принимает именно такие параметры?
alex455
mixed __call ( string $name , array $arguments )

Почему параметров только 2 и первый - строка, а второй - массив? А если мне нужно 4 параметра и все - числовые?



Спустя 9 минут, 24 секунды (21.08.2011 - 21:13) quickxyan написал(а):
alex455
странный вопрос. думаю это к разработчикам smile.gif

Спустя 11 часов, 8 минут, 11 секунд (22.08.2011 - 08:21) linker написал(а):
А что вас удивляет? Первый параметр - это название метода, второй параметр - список значений переданных аргументов - call_user_func_array() читаем.

Спустя 2 часа, 55 минут, 44 секунды (22.08.2011 - 11:17) alex455 написал(а):
linker, я не совсем понимаю, зачем нужен __call(). Вроде, для того, чтобы быть перенаправлением для несуществующего метода. Как тогда параметры подбирать? И зачем всё это нужно? Зачем нужно вызывать несуществующий метод?

Спустя 17 минут, 54 секунды (22.08.2011 - 11:35) linker написал(а):
Когда вызываешь метод, то обычно ты точно знаешь какие параметры он требует. Применяется для врапперов, когда методы вызываются через посредника.
class Wrapper
{
public function __call($method, $args)
{
$object = array_unshift($args);
call_user_func_array(array($object, $method), $args);
}
}


class Object
{
public $a = 0;

public function setA($value)
{
$this->a = $value;
}
}


$wrapper = new Wrapper();
$wrapper->setA(new Object(), 10);

Спустя 11 минут, 16 секунд (22.08.2011 - 11:46) alex455 написал(а):
$wrapper->setA(new Object(), 10);

Второй аргумент должен быть массивом, но 10 - не массив. unsure.gif

Спустя 4 минуты, 42 секунды (22.08.2011 - 11:51) linker написал(а):
alex455
Кто сказал, что там должен быть массив? Смотрим сюда
__call($method, $args)
и сюда
$wrapper->setA(new Object(), 10);
Когда вызывается метод setA(), PHP перебрасывает на __call(), в результате вызов этого метода представляется как
$wrapper->__call('setA', array(new Object(), 10));
т.е. еще проще говоря, это
$wrapper->setA(new Object(), 10);
тоже самое, что и
$wrapper->__call('setA', array(new Object(), 10));
только подобное преобразование делает PHP скрытно у себя внутрях.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.