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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> preg_replace_callback 
:(
    Опции темы
NewDima
Дата 12.8.2009, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



В общем, наверняка баян, но я ничего не нашел, к сожалению.
У меня есть шаблон вида:
"текст тыры {--mod("modules.visual.additional")--} пыры и здесь что-нибудь {--def("эритроцит")--}".
Мне нужно каждое вхождение 
Код

{--func(param)--}

в шаблоне заменить результатом работы метода func определенного класса.
Для этого решил воспользоваться функцией preg_replace_callback. Но проблема в том, что она не поддерживает методы класса. пробовал так, и что-то подобное нужно мне:
Код

function class_alias($matches) {
    return cls::getInstance()->$matches[1]($matches[2]);
}

class cls {
    public static function &getInstance() {
        static $instance;
        if (!isset($instance)) $instance = new cls();
        return $instance;
    }

    public function mod($param) {
        return "modresult";
    }
    public function def($param) {
        return '<a href="$param">$param</a>';
    }
}
$text = '{--mod("name")--} text7 ';
$text.= 'text8 {--def("фраза")--} text9';
echo preg_replace_callback('|{--([\w]+)[(]"([\w]+)"[)]--}|','class_alias',$text);

но хотелось бы сделать без дополнительного алиаса.
Потому как одно из вхождений в строке может вызвать создание нового экземпляра класса cls, а нового не будет, будет работа со старым.
Если класс делать не синглетон, тогда нужно создавать стек, в который помещать ссылку на экземпляр, для которого должен сработать алиас. Таким образом все получается вполне реализуемо, но, вроде, неоправданно закручено. Наверняка можно сделать проще. Только вот как...
PM ICQ   Вверх
NewDima
Дата 12.8.2009, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



И еще один вопрос:
preg_replace_callback не терпит повторных вхождений?
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

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

Важно:

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

Внимание:

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

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

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


 




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


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

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