| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > вызов пользовательского метода |
| Автор: bars80080 29.9.2009, 17:37 | ||||
| вечер, уже не соображаю есть такая функция: call_user_func_array через неё мы можем вызвать как функцию:
так и метод класса:
но, судя по всему, когда мы вызываем метод, он вызывается по типу classname::methodname, а в этом случае методу не доступны любые свойства класса, которые в методе прописаны как $this->property во всяком случае ругается: Fatal error: Using $this when not in object context in ... что в принципе понятно, это ведь не объект и содержимого у него нет. тогда вопрос: как вызвать метод именно объекта, а не класса? я же не могу написать call_user_func_array('obj->methodname', array(arg1, arg2, ...)) не записывается же оно так ${'objname'}->{'methodname'}()? |
| Автор: sTa1kEr 29.9.2009, 17:40 | ||
|
| Автор: bars80080 29.9.2009, 17:47 |
| а почему $this? мне бы любого объекта |
| Автор: sTa1kEr 29.9.2009, 17:47 |
Ну это для примера только. Конечно-же можно любой объект подставить. |
| Автор: bars80080 29.9.2009, 17:50 | ||
| call_user_func_array(array('objname','methodname'), array(arg1, arg2)); ? что-то я пробовал, либо прохлопал, либо не получалось. щас посмотрим Добавлено через 2 минуты и 7 секунд
какая-то такая хрень вылазит Добавлено через 5 минут и 2 секунды первый параметр функции: array(2) { [0]=> string(2) "RB" [1]=> string(15) "getGraficAccess" } имя объекта и имя метода |
| Автор: bars80080 29.9.2009, 18:02 | ||
это я call_user_func_array(array(${'objname'}, 'methodname')) я не могу вписать именно $objname, вызов call_user_func_array происходит в другом классе, могу только передать имя объекта и имя метода Добавлено через 39 секунд сделал global $RB; результат такой (см.выше) |
| Автор: sTa1kEr 29.9.2009, 18:19 | ||||
Значит тебе нужно каким-либо образом передать сам объект, по другому никак. И вообще, что-то я не понимаю, как ты собрался вызывать метод объекта, который не существует в текущем контексте? Добавлено через 38 секунд У тебя в первом элементе массива NULL, а должен быть объект, метод которого ты пытаешься вызвать. Добавлено через 1 минуту и 53 секунды Если у тебя $objname содержит имя локальной переменной, которая содержит нужный тебе объект, тогда так
|
| Автор: bars80080 29.9.2009, 19:20 |
| вот так просто не выходило: call_user_func_array(array(${$ar[$i]}, 'methodname'), array(arg1, arg2)); где $ar[$i] - имя объекта завтра попробуем $$objname |
| Автор: youri 29.9.2009, 19:42 | ||
что мешает? тебе надо передать call_user_func_array объект, а не его имя |
| Автор: icewind 29.9.2009, 20:48 | ||
| bars80080, какая версия php? Вариант sTa1kEr должен работать. В call_user_func_array нужно передать http://ru2.php.net/manual/en/language.pseudo-types.php#language.types.callback
Должно работать. У меня на php 5.3 заработало |
| Автор: MoLeX 30.9.2009, 05:28 |
| рнр 4 скорей всего у барса. сомневаюсь что он будет так работать |
| Автор: bars80080 30.9.2009, 09:42 | ||
| 5.2.6 у меня, а в доках написано, что функция должна работать с 4.0.6 всё, допёр, не происходило передачи объекта, функция сама нормально а не происходило, потому что была кривизна во взаимоотношении классов. фишка какая: первый класс, который занимался строительством страницы, подключал в себя запрашиваему страницу. в ней находится второй класс, который пользуется методом первого класса, в котором прописана call_user_func_array решилось тем, что в странице со вторым классом перед $RB = new secondclass(); прописал global $RB; а в первом классе
наверное, надо будет выносить инклуд страниц из внутренностей класса, хотя честно говоря, не очень бы хотелось |
| Автор: sTa1kEr 30.9.2009, 09:47 |
| |
| Автор: bars80080 30.9.2009, 10:18 |
что именно? |
| Автор: sTa1kEr 30.9.2009, 10:39 | ||
| Конструкции вроде "global ${$fields[$j][3][$k][2]}". Переменные переменные и глобальные переменные сами по себе источники ошибок и неразберихи в коде, но глобальные переменные переменных... Кстати, имхо, чуть-чуть более читабельной была бы конструкция:
|
| Автор: bars80080 30.9.2009, 13:56 |
| да, знаю. надо будет поразмыслить над этим попозжей |
| Автор: youri 30.9.2009, 15:43 | ||
используешь глобальное пространство имен для передачи информации? Почему бы не воспользоваться стандартным средством: параметрами функций/методов? |