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

freeek

Новичок
Re: распарсить РНР файл, вывести содержимое каждой фунции отдельно

Автор оригинала: jeno
нужно распарсить этот файл так чтоб получить отдельно названия 3х функция (part1, part2, part3) и отдельно их содержимое (то что в фигурных скобках)...
можно было бы воспользоваться регулярными выражениями, но внутри функции могут быть закрывающие фигурные скобки, от чего могут возникнуть ошибки... (парсер будет возвращать все содержимое до первой фигурной скобки =\ )

мне надо чтоб парсер понимал какая закрывающая скобка что закрывает...

как это лучше сделать?

имхо:я вижу вариант с циклом,которые будет бегать по файлу, и разбираться какая скобка что закрывает/открывает...
но может есть более простые решения? (может быть просто регулярным выражением как-то)

спасибо!
не то что можно а даже нужно!
PHP:
$f = 'function part1() 
{ 
    $HTML1=<<<EOF 
    ... some html 1 ... 
EOF; 
} 

function part2() 
{ 
    if(1){ 
        $HTML2=<<<EOF 
... some html 2 ... 
EOF; 
    } 
} 

function part3() 
{ 
$HTML3=<<<EOF 
... some html 3 ... 
EOF; 
} ';
preg_match_all('%(?<=function\s)[a-z0-9]+(?=\(\))%isU',$f,$m);
preg_match_all('%\{((?>[^{}])|(?R))*\}%is',$f,$h,PREG_SET_ORDER);
echo '<pre>';
print_r($m);
print_r($h);
exit();
 

freeek

Новичок
я так понял это касаемо 5ки? а если 4ка

ну во-первых я не претендую на звание "истина в последней инстанции", а потом причем здесь говнокодище
суть не в том как это оформелено, это черновик,
а суть в патернах
я думаю здесь простая логика в том как легко и понятно забрать имя и содержимое

ну допустим, если это ковнокодище (хотя тут в основном приведены патерны, которые дают пищу для размышления и расширения), то тогда давай свой вариант

я всегда ЗА, чтобы узнать что то новое, а то твои слова это чистый говнопад и срать из топика в топик, демонстрируя яйца в норковой шубе, как то несерьезно
 

Фанат

oncle terrible
Команда форума
о мама мия!
я разделю, с вашего позволения.
был бы раздел "куншткамера" - поместил бы в него
 

freeek

Новичок
мотивируй?
мне лично пох зачем это понадобилось типикстартеру, любая задача, тем более та с которой не сталкивался, мне интересна, потому возможно не для это а в чем то другом сходном это пригодиться

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

форум на то и форум, чтобы в споре рождалась истина а не в сраче

вот если б была система оценок ответов в одну и другу сторону, вот тогда бы срача поубавилось и было видно, кто просто пофлеймить пришел, а кто действительно чем то помогает
 

Adelf

Administrator
Команда форума
freeek твоя функция словит все закомментаренные функции. а также возможно кусочки яваскрипт-кода, случайно могущие оказаться в php-файле. Задача вообще странная... почти наверняка не нужно это ТСу.
 

DiMA

php.spb.ru
Команда форума
читаем про reflection

это - все[size=+3].[/size] ( <---жирная точка )
 

freeek

Новичок
ну не знаю, что она там словит, это уже не мое дело, пусть тс раширяет ее как ему угодно

++специально проверил!

в одном из своих скриптов, все функции вынесены в отдельный файл

использовал данную

получил содержимое всех имен и содержимого ;)

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


неволнуйся, пупсичек, про рефлекшен обязательно почитаем
 

DiMA

php.spb.ru
Команда форума
ты на кого здесь тяфкаешь? .-)

один идиот задал идиотский вопрос, другой идиот какой-то бред в ответ привел... ну шо за страна. -)
 

freeek

Новичок
ну вопервых не тявкаю а пишу ;)
а во вторых крутым мега кодерам, которые все знают

думаю на этом можно закончить
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
кажется, было правило банить за фриковские ники :)
 

Wicked

Новичок
DiMA
[4 fun] выведи с помощью reflection (но без помощи runkit) тела функций в следующих файлах:

1.php:
PHP:
<?php
function a () {
  print 1;
}
2.php:
PHP:
<?php
function a () {
  print 2;
}
ЗЫ: freeek'у оправданий все равно нет :)
 

freeek

Новичок
оправдания как раз таки вам нет
я еще раз говорю, создайте приватный раздел для мега кодеров, чтоб нубы не мешали и создайте систему оценок

то что я решил это вопрос как мне привычно, распарсить обычный текс при помощи реги, причем чисто скелетно без сильных думок, = вопрос решен

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

вообще дурная слава у клуба, не форум а хер знает что и все из-за кучки мега кодеров, которым все глаз колит
да я самоучка и в чем статью с клуба помогли мне, но вот срач как то ничему особо не способствует, проще найти другое комьюнити
 

Духовность™

Продвинутый новичок
мне лично пох зачем это понадобилось типикстартеру, любая задача, тем более та с которой не сталкивался, мне интересна, потому возможно не для это а в чем то другом сходном это пригодиться
Само по себе явление задачи не означает, что эту задачу надо немедленно бросаться решать. В данном случае ТС сделал неуклюжую, нивелирующую само понятие шаблон архитектуру, которая у него полюбому рано или поздно загнётся. И тут наилучшим решением для ТС был бы рефакторинг кода и использование более внятного механизма разделения логики и шаблонов. Поэтому, Фрик, ошибка твоя не в том, что ты используешь регулярное выражение для тех целей, когда нужны конечные автоматы, а в том, что ты пытаешься помочь ТС развить в ещё больший говнокод и без того говнокодистое решение. Т.е. если твой метод кое-как работает, это не значит, что это правильно с точки зрения разработки.
 

freeek

Новичок
а это уже не мое дело
тс ж не просит оценить архитектуру, просит решить
если он криво пишет, помогать ему пока он этого не понял бесполезно
а бросился я ее ришать еще чисто из-за того что люблю реги и мне в каком то роде интересно для себя
но это не повод срать, еще раз говорю, кто читать не умеет, могу еще раз написать, не надо срать
 

Духовность™

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

если он криво пишет, помогать ему пока он этого не понял бесполезно
полезно. не дойдет с 1 раза, дойдет со второго.
 

freeek

Новичок
объясню, прежде чем что то сделать и по мере усложнения, я всегда перелапачиваю гору информации, статью, топики форумов, гугл и т.д.

зачем я это делаю, понимая, что мой код с изъянами, я всегда ищу способ и информацию как этоделается правильно, тем самым самокритика в мое случае меня учит

если человек, овладем чем то поверхностно, не хочет идти дальше, а ищит простых решений, это ему поможет где то в начале, а потом он встанет и тем более если он будет писать говнокод, его труд не пренесет ни копейки

в данном случае я б в последнюю очередь полез на форум искать ответ на свой вопрос, полагая что с подобным (впринципе) кто то когда то сталкивался это где то есть в сети

поэтому тыкать носом в свое же говно ребенка бесполезно пока он не вырастит и поймет что для говна есть туалет и продать гавно никому нельзя

а третьим лицам это полезно, ну может не профи а простым начинающим кодерам

с регами вообще народ плохо дружит и если применяет то не всегда там где это уместно, а для самотренировки самый раз

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