Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> динамическое создание функции - метода класса 
:(
    Опции темы
ksnk
Дата 21.6.2010, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Захотелось написать что-то навроде такого
Код

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

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

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


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Fortop
Дата 21.6.2010, 17:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



ksnk, а зачем?
Чем не устроили приватные методы?

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

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



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
ksnk
Дата 21.6.2010, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(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) {




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Fortop
Дата 21.6.2010, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(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-шники стырили идею замыкания?

Да. 



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1084 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.