Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Вызвать статический метод класса


Автор: o.s.a. 10.7.2006, 20:12
Код

<?php
class myClass
{
  static public function func() {echo "o.s.a.";}
}

$ClassName = "myClass";

myClass::func(); // работает

// а нужно что-то типа:
$ClassName::func();
?>

Т.е. нужно вызвать метод класса, имея имя класса в переменной. 

Автор: szz 10.7.2006, 20:34
Ха-ха-ха...  я чуть от смеха не умер...
Выводит ошибку:
Цитата

Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in D:\htdocs\index.php on line 9

  Это на кого зендовцы расчитали?..   Это ж на иврите!  PAAMAYIM_NEKUDOTAYIM значит "Дважды двоеточие"  )))

Добавлено @ 20:37 
Я бы написал 
Код
eval("$ClassName::func();");
 и не мучался 

Автор: o.s.a. 10.7.2006, 20:37
Цитата(szz @  10.7.2006,  22:34 Найти цитируемый пост)
Это на кого зендовцы расчитали?..   Это ж на иврите!  PAAMAYIM_NEKUDOTAYIM значит "Дважды двоеточие"  )))  

Ва ха ха  smile 

и все таки, что можете предложить?

Добавлено @ 20:44 
szz, спб. проканало 

Автор: szz 10.7.2006, 20:51
Цитата

Ва ха ха


   Да, протупили наши израильские обкурки )))   Видимо, из Египта хорошую ганджу привезли  smile

Добавлено @ 20:53 
И кстати, ты особо не злоупотребляй эвалом - а то он не оптимизируется.
  И ваще, как сказал один умный дядя "если вам приходится пользоваться эвалом - значит у вас что-то не так спроектировано". 

Автор: vasac 11.7.2006, 08:37
Код

call_user_func( Array( $ClassName, 'func' ) );
 

Автор: AztEK 11.7.2006, 08:55
 smile  Здорово
Код

$$ClassName::func();
 

Автор: o.s.a. 11.7.2006, 12:12
vasac, у тебя самое правильное решение, спб

З.Ы. 
AztEK, ты хотя бы попробовал, а потом писал  smile  

Автор: AztEK 11.7.2006, 12:36
Цитата(AztEK @  11.7.2006,  11:55 Найти цитируемый пост)
$$ClassName::func();

Ммм...Да...Извиняюсь 

Автор: szz 11.7.2006, 15:22
call_user_func - это тот же эвал, но в другой обертке. 

  Что-то не так в проектировании!!!
 Подумайте, почему приходится НАСТОЛЬКО динамически обращаться к названию класса?

   Может стоит сделать иерархию наследования и полиморфировать?
   Впрочем, все зависит от контекста.
  Опишите пожалуйста ситуацию, мне интересно подумать о решении без эвала. 

Автор: o.s.a. 11.7.2006, 19:17
szz, гляди:
Цитата

Вакансия веб-программиста

На постоянную работу в компанию NEXT Technology требуется веб-программист.

Требования к кандидату:
# Отличное! знание PHP, MySQL;
# Знания PosgreSQL, C/C++ и сетевых протоколов приветствуются;
# Опыт работы над серьёзными проектами;

Описание работы:
# Разработка веб-проектов совместно с группой грамотных специалистов;

Как устроиться?

Пришлите нам свое резюме и/или краткий рассказ о себе, включая ссылки на выполненные проекты и самую интересную на Ваш взгляд часть PHP кода.

 

Нам было бы проще сложить о Вас впечатление, получив от Вас результат одного из трех тестовых заданий:
Язык программирования: PHP

1. Написать рекурсивную версию построения дерева по данным, хранящимся в БД в иерархическом виде (отношение "родитель-потомок"). Дерево должно иметь вид массива, где дети хранятся во вложенных массивах $tree['childs'].
Hint: использовать группировку и объединение.

2. Дан класс со статическим методом, вызвать статический метод имея ТОЛЬКО имя метода и переменную $ClassName с именем класса.

3. Написать простейший механизм безопасной авторизации.


Я выбрал соотв. 2-ое (мороки меньше всего), но вариант $ClassName::func(); не сработал, 
мне стало интересно, вот я и запостил на форум 

Автор: AztEK 11.7.2006, 19:49
Хм...А предполагалось то наверное самому писать, а не на форумах спрашивать ;) 

Автор: Kefir 11.7.2006, 19:57
AztEK, на форуме спросил и узнал - значит, знаешь как написать  smile  smile  smile  

Автор: vasac 11.7.2006, 20:52
Я поступил! Я поступил! [радостно хлопает в ладоши] 

Автор: RomanK 11.7.2006, 23:03
А по мне... то третий пункт сделать и легче и извращаться не надо! ИМХО конечно. smile 

Автор: o.s.a. 12.7.2006, 08:15
Цитата(AztEK @  11.7.2006,  21:49 Найти цитируемый пост)
Хм...А предполагалось то наверное самому писать, а не на форумах спрашивать ;)  

Ясный пень самому, просто то, что я думал сработает, работать не стало, вот я решил тута спросить.



Цитата(RomanK @  12.7.2006,  01:03 Найти цитируемый пост)
А по мне... то третий пункт сделать и легче и извращаться не надо! ИМХО конечно. smile  

Да, мне любой не проблема написать, просто щас времени нет, потому и выбрал самое короткое решение smile  

Автор: szz 12.7.2006, 08:19
Я бы - первый делал! Самое интересное!

  Так взяли или нет?  

Автор: Aliance 14.7.2006, 12:55
А если подстановочные данные выделить фиг. скобками? 

Автор: szz 14.7.2006, 18:31
Это ты о чем конретно, JavaScript!=Java ? 

Автор: o.s.a. 15.7.2006, 19:31
Цитата(Aliance @  14.7.2006,  14:55 Найти цитируемый пост)
А если подстановочные данные выделить фиг. скобками?  

Конечно, пробовал. Вот именно после этого и решил спросить тута 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)