:: - обращение к ф-циям не созданного объекта класса, как?

  • Автор темы Автор темы Screjet
  • Дата начала Дата начала

Screjet

Новичок
:: - обращение к ф-циям не созданного объекта класса, как?

Реализация такого:
PHP:
$class_name = 'my_class';
$obj = new $class_name();
Вполне нормально работает, но такое:
PHP:
$class_name = 'my_class';
$result = $class_name :: my_func();
выдает ошибку еще при разборе:
"parse error, unexpected T_PAAMAYIM_NEKUDOTAYIM"

Может кому-то уже удалось решить такую проблему?
 
Автор оригинала: Screjet
PHP:
$class_name = 'my_class';
$result = $class_name :: my_func();
выдает ошибку еще при разборе:
"parse error, unexpected T_PAAMAYIM_NEKUDOTAYIM"

Может кому-то уже удалось решить такую проблему?
PHP:
$result = call_user_func(array($class_name, 'my_func'));
 
Вот так еще можно:
PHP:
  $classname = 'myclass';
  $funcname = 'myfunc';
  $new_obj = new $classname();
  $new_obj->$funcname();
 
Crazy, что-то когда меня глючит, мне хочется что-то написать :)

теперь прочитал :)
 
static function

Кажеться это называеться "статическими методами объекта"
Реализовано в PHP5
 
А чем "статические методы объекта" в PHP5 отличаются от "методов класса" в других языках?
 
Статический метод может быть вызван даже тогда когда экземпляр класса ещё не создан.
 
А метод класса -- не может? :) Опять таки -- код на PHP4:

PHP:
class Foo {
  function bar() {
    return 1;
  }
}

Я не могу вызвать bar(), пока не создам экземпляр? :)
 
Из статического метода ты не можешь обращатся к не статическим полям класса. Короче не можешь использовать $this.
 
Автор оригинала: globus
Из статического метода ты не можешь обращатся к не статическим полям класса. Короче не можешь использовать $this.
Изза глобальной видимости $this в PHP4
очень даже можешь использовать ее где угодно
и даже по ней определять контекст вызова своего метода :)

Хотя это уже извращение
 
Автор оригинала: Sad Spirit
PHP:
$result = call_user_func(array($class_name, 'my_func'));
кстати возвращается ли при таком вызове
значение по ссылке типа:
PHP:
$result =& call_user_func(array($class_name, 'my_func'));
??
 
Сверху