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


Автор: ksnk 21.6.2010, 15:39
Захотелось написать что-то навроде такого
Код

class MyClass {
...
   function JustAFunction($s){
       return preg_replace_callback('/\$(\w*)/',create_function('$m','return $this->store[$m[1]];',$s));
  }
...
}

основной смысл - функция маленькая и не нужна нигде, кроме этого места, однако вызвать ее нужно внутри метода некоего класса и работать функция должна с этим-же классом.

Понятно, что проблема элементарно решается, если завести новую функцию в классе и подставлять ее в функцию в виде array($this,'MyFunction'). Но можно ли в этом случае как-то использовать create_function?

Автор: Fortop 21.6.2010, 17:22
ksnk, а зачем?
Чем не устроили приватные методы?

P.S. В 5.3 я местами для таких вещей использую новый синтаксис.
Код

$obj = $this;
$p = function($param) use ($obj) {
   
};
$p('value');

Автор: ksnk 21.6.2010, 17:32
Цитата(Fortop @  21.6.2010,  17:22 Найти цитируемый пост)
Чем не устроили приватные методы?

Тем , что create_function вроде как именно для таких случаев и сделана, ан в эту вот конкретную дырку ее никак не запихать smile
Метод совсем никому будет не нужен. кроме как в этом месте, так что как бы сложно самому себе объяснить осмысленность создания нескольких дополнительных странных функций...

Цитата(Fortop @  21.6.2010,  17:22 Найти цитируемый пост)
function($param) use ($obj) {

Блин! А я и не знал... Вот до чего дошел прогресс  smile Скоро php станет совсем большим языком.

Добавлено через 3 минуты и 45 секунд
Кстати, а где в мануале такой синтаксис описывается?
И чем объясняется такой финт с переменными? почему нельзя просто указать $this? Это злые php-шники стырили идею замыкания?
Цитата(Fortop @  21.6.2010,  17:22 Найти цитируемый пост)
$obj = $this;
$p = function($param) use ($obj) {


Автор: Fortop 21.6.2010, 22:48
Цитата(ksnk @  21.6.2010,  17:32 Найти цитируемый пост)
Метод совсем никому будет не нужен. кроме как в этом месте, 

Ну, приватные методы не наследуются smile

Цитата(ksnk @  21.6.2010,  17:32 Найти цитируемый пост)
Кстати, а где в мануале такой синтаксис описывается?

http://php.net/functions.anonymous

Цитата(ksnk @  21.6.2010,  17:32 Найти цитируемый пост)
И чем объясняется такой финт с переменными? почему нельзя просто указать $this?

$this зарезервирован как бы.
Где-то я читал объяснения девелоперов по этому поводу, но уже не помню в чем была суть.
Факт что не сделали smile Хотя многим хотелось бы чтобы так работало.

Цитата(ksnk @  21.6.2010,  17:32 Найти цитируемый пост)
Это злые php-шники стырили идею замыкания?

Да. 

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