Сразу говорю - его нет.
А теперь о том, что же я хотел. Воодушевленный наличием class methods и instance methods в ruby. я захотел сделать что-то подобное в PHP. Не сложилось.
Все началось с того, что в php нет анонимных функций. Вернее, есть, но кривые.
$func = create_function('$param1, $param2', 'echo "$param1: $param2\n";');
echo “$func\n”;
$func(”a”, 1);
Получим:
lambda_1
a: 1
Наверное, вы подумали, что теперь у нас не должно быть никаких прблем с расширением классов. Но вы ошиблись. Во первых, не удастся сделать class method в php. Просто потому, что конструкция типа TheClass:: = create_function('', ';'); жутко напугает php и он быстро поднимет лапы к верху: Parse error: syntax error, unexpected '='
Тут подумалось, ну, раз функцию можно в переменную всунуть, то ее наверняка можно всунуть и в поле объекта, что уже есть instance method’ом.
$b = new A;
$b->boo = create_function(”, ‘echo “boo!!!\n”;’);
echo $b->boo;
Этот код выдаст нам ожиданную lambda_1. Но! Дальше начинается то, чего я вовсе не ожидал.
$b->boo();
Fatal error: Call to undefined method A::boo()
Выходит, что единственным способом расширения классов в PHP является наследование. Печально. Так хотелось сладкого…








