Можно ли в php-класс добавить статический метод извне?

Рейтинг: 0Ответов: 1Опубликовано: 09.04.2015

В стиле с++, а-ля:

class Foo{

    static function ololo(){
        return 1;
    }

}

function Foo::bar(){
   return self::ololo();
}

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

Ответы

▲ 1

Стандартными средствами текущая версия PHP такого сделать не позволит. Вы можете изменить свойство класса, но не добавить новое динамически (не считая экспериментальный способ, предложенный @TheDoctor). Например, можно сделать следующее:

class A {
   public static $method;
}

A::$method = function() { 
    print 'статический метод'; 
};

call_user_func(A::$method);
// или
$caller = A::$method;
$caller();

Причина этому, вероятнее всего, кроется в различнии типа языка: C++ -- компилируемый, а PHP -- интерпретируемый, т.е. выполняющийся в runtime, что вряд ли может позволить менять статические переменные в процессе исполнения.