Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Формирование вызова методов класса из переменных (phoenix)
Author Message
phoenix
Участник форума



Joined: 06 Feb 2007
Posts: 53
Карма: 0
   поощрить/наказать


PostPosted: Fri Dec 28, 2007 11:01 am (написано за 3 минуты 49 секунд)
   Post subject: Формирование вызова методов класса из переменных
Reply with quote

Возник такой, видимо, несложный вопрос:

1. Есть переменная $classname;
2. Есть переменная $method;

Как вызвать класс $classname (кстати, это я понял - "(object) $classname") с методом $method, но без применения eval? Желательно знать как вариант classname::method, так и classname->method (если, конечно, они отличаются, что врядли).
Back to top
View user's profile Send private message
Валенок
Участник форума



Joined: 06 Apr 2006
Posts: 520
Карма: -3
   поощрить/наказать


PostPosted: Fri Dec 28, 2007 11:25 am (спустя 24 минуты; написано за 1 минуту 37 секунд)
   Post subject:
Reply with quote

поскольку такое
Code (php): скопировать код в буфер обмена
$name = 'OmgClass';
$name::lala('two ');
(new $name)->kuku();
выдало по парсеру еррору для 2ой и 3ей строки, осмелюсь предположить, что лишь с помощью www.php.net/manual/ru/function.call-user-func.php


кстати, то что пхп глючит на
Code (php): скопировать код в буфер обмена
(new someClass)->someMethod();
- это, имхо, реально гадость
Back to top
View user's profile Send private message
phoenix
Участник форума



Joined: 06 Feb 2007
Posts: 53
Карма: 0
   поощрить/наказать


PostPosted: Fri Dec 28, 2007 11:34 am (спустя 9 минут; написано за 2 минуты 19 секунд)
   Post subject:
Reply with quote

Вот, нашел такой вариант:
Code (php): скопировать код в буфер обмена
$class = new $classname;
$class->$method();
А что в две строки и не через "::", ну и черт с ним, наверно.
Back to top
View user's profile Send private message
Валенок
Участник форума



Joined: 06 Apr 2006
Posts: 520
Карма: -3
   поощрить/наказать


PostPosted: Fri Dec 28, 2007 12:16 pm (спустя 41 минуту; написано за 54 секунды)
   Post subject:
Reply with quote

phoenix ага, особенно если учесть что тут 2 строки, памяти тратится больше и лишнюю переменную приходится задействовать - это реально лучше чем предложенный мной www.php.net/manual/ru/function.call-user-func.php . да...
Back to top
View user's profile Send private message
kernel32
Участник форума



Joined: 18 Mar 2006
Posts: 256
Карма: 24
   поощрить/наказать

Location: Москва

PostPosted: Fri Dec 28, 2007 1:03 pm (спустя 47 минут; написано за 2 минуты 23 секунды)
   Post subject:
Reply with quote

Валенок, согласен, call_user_func() здесь однозначно рулит.
Если $obj - объект какого-то класса, можно вызвать метод, имя которого хранится в $methot_name, так:
Code (php): скопировать код в буфер обмена
call_user_func (www.php.net/call_user_func)(array (www.php.net/array)(&$obj, $method_name));
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML