![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
bars80080 |
|
||||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
вечер, уже не соображаю
есть такая функция: 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 |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
|
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
а почему $this? мне бы любого объекта
|
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
||||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
call_user_func_array(array('objname','methodname'), array(arg1, arg2)); ?
что-то я пробовал, либо прохлопал, либо не получалось. щас посмотрим Добавлено через 2 минуты и 7 секунд
какая-то такая хрень вылазит Добавлено через 5 минут и 2 секунды первый параметр функции: array(2) { [0]=> string(2) "RB" [1]=> string(15) "getGraficAccess" } имя объекта и имя метода |
|||
|
||||
sTa1kEr |
|
||||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Да нет же. Если оба элемента строки - то будет вызван статический метод класса. Если первый элемент объект, то будет вызван метод этого объекта.
|
||||
|
|||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
это я call_user_func_array(array(${'objname'}, 'methodname')) я не могу вписать именно $objname, вызов call_user_func_array происходит в другом классе, могу только передать имя объекта и имя метода Добавлено через 39 секунд сделал global $RB; результат такой (см.выше) |
|||
|
||||
sTa1kEr |
|
||||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Значит тебе нужно каким-либо образом передать сам объект, по другому никак. И вообще, что-то я не понимаю, как ты собрался вызывать метод объекта, который не существует в текущем контексте? Добавлено через 38 секунд У тебя в первом элементе массива NULL, а должен быть объект, метод которого ты пытаешься вызвать. Добавлено через 1 минуту и 53 секунды Если у тебя $objname содержит имя локальной переменной, которая содержит нужный тебе объект, тогда так
|
||||
|
|||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
вот так просто не выходило:
call_user_func_array(array(${$ar[$i]}, 'methodname'), array(arg1, arg2)); где $ar[$i] - имя объекта завтра попробуем $$objname |
|||
|
||||
youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: 6 Всего: 16 |
||||
|
||||
icewind |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 11.4.2009 Где: Ростов-на-Дону Репутация: 20 Всего: 20 |
bars80080, какая версия php?
Вариант sTa1kEr должен работать. В call_user_func_array нужно передать валидный callback
Должно работать. У меня на php 5.3 заработало -------------------- ![]() |
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
рнр 4 скорей всего у барса. сомневаюсь что он будет так работать
-------------------- Amazing ![]() |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
5.2.6 у меня, а в доках написано, что функция должна работать с 4.0.6
всё, допёр, не происходило передачи объекта, функция сама нормально а не происходило, потому что была кривизна во взаимоотношении классов. фишка какая: первый класс, который занимался строительством страницы, подключал в себя запрашиваему страницу. в ней находится второй класс, который пользуется методом первого класса, в котором прописана call_user_func_array решилось тем, что в странице со вторым классом перед $RB = new secondclass(); прописал global $RB; а в первом классе
наверное, надо будет выносить инклуд страниц из внутренностей класса, хотя честно говоря, не очень бы хотелось |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
![]() |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |