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


Автор: neoks 11.8.2011, 10:31
Вообщем хочу сделать ббкод, он почти готов но есть одна маленькая неприятность.
Хочу чтоб можно было парсить теги, то есть у каждого модуля может быть свой парсер тега а может и не быть.
Добавляются парсер путем includa, но тут есть одна загвоздка.

Я пытаюсь добавить внутри класса, вообшем шас покажу.

Файл ббкода.
Код

class bb_code{
    function encode($source,$html = true){
         
         include_once('parser.php'); //Файл парсера
         
         $source = preg_replace( "#\[info\s*=(.+?)\](.+?)\[/info\]#ise", "\$this->info('\\1','\\2')", $source );

         .....
    }
}


Файл parser.php.
Код

$source = preg_replace( "#\[more\s*=(.+?)\](.+?)\[/more\]#ise", "\$this->more('\\1','\\2')", $source );


Как видно файлу с парсером нужна функция $this->more() в классе bb_code
Проблема в том что создавать функцию в нутри функции нельзя, даже если я сделаю отдельную функцию от класса например просто more()

Но и в нутри класса тоже нельзя вставлять коды, только функции и переменные.

Пока не знаю что делать, только один вариант приходит это тупо за пределами класса инклюдить еше один файл с функциями  smile 

Автор: Absinthe 11.8.2011, 10:58
1. Занимаешься фигней. Возьми нормальный готовый парсер.
BB-коды не делаются регексп-заменами. Это путь к XSS.

2. Продумай архитектуру.
class BbParser {}, abstract class BbCode {}, class BBcodeItalic extends BbCode {}...

3. Через гoвнокод твоя проблема решается с помощью __call.

4. Смотри пункт 1.

Автор: neoks 11.8.2011, 11:13
Цитата(Absinthe @  11.8.2011,  10:58 Найти цитируемый пост)
 __call

В последние время начал встречать классы с public, private и тд. , блин как это все называется и где моно найти статьи про все это, а то все это для меня впервые  smile 


Цитата(Absinthe @  11.8.2011,  10:58 Найти цитируемый пост)
class BbParser {}, abstract class BbCode {}, class BBcodeItalic extends BbCode {}

А моно пример, я шас вообше не шарю что тут происходит, и если не трудно показать как потом можно будет подключить дополнительные парсеры.

Автор: Absinthe 11.8.2011, 23:57
Цитата

В последние время начал встречать классы с public, private и тд. , блин как это все называется и где моно найти статьи про все это, а то все это для меня впервые
 Учебник по основам PHP. Я серьезно, кстати.
Если знаешь английский - то от Zend прочитай, который к сертификации готовит.

Цитата

А моно пример, я шас вообше не шарю что тут происходит, и если не трудно показать как потом можно будет подключить дополнительные парсеры.
 Теоретическое любопытство утолит учебник, практическую необходимость - применение готового парсера.

Добавлено через 42 секунды
А если не знаешь английский - то учить придется все равно.

Автор: neoks 12.8.2011, 11:06
Цитата(Absinthe @  11.8.2011,  23:57 Найти цитируемый пост)
А если не знаешь английский - то учить придется все равно. 

Да вот как раз знаю на базе чтения  smile 
Цитата(Absinthe @  11.8.2011,  23:57 Найти цитируемый пост)
Учебник по основам PHP. Я серьезно, кстати.

Проблема найти хороший, яж php учил самостоятельно, то там посмотрел то там вот и теперь знаю не плохо, но когда смотриш чужии коды начинаеш встречать фунцкии и методы которые видеш в первые.

У меня свой метод изучения, я сначала смотрю код а затем в мыслях разбираю код по частям и смотрю как все происходит и зачем, результат не стал себя ждать.  smile 

Нашёл неплохую документацию про классы, лан пошёл смотреть и немного подучу.

Автор: Absinthe 12.8.2011, 11:59
Цитата

яж php учил самостоятельно
 А есть другие варианты?   smile 

Цитата

Нашёл неплохую документацию про классы, лан пошёл смотреть и немного подучу.
 Надеюсь, за авторством Zend?

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