php. и регулярные выражения.
Он сначала полностью производит поиск и замену по первому шаблону, потом по второму, и т.д.
preg_replace_calback('/##(lalalala1|lalalala2|[^#]+)##/', $str, 'myfunc');
function myfunc( &$m )
{
switch( $m[1] ) {
case 'lalala1': return ...;
case 'lalala2': return ...;
default: return 'undef';
}
}
как раз наткнулся на эту функцию
идея взята с http://forum.vingrad.ru/forum/topic-154537.html
если кто знает, как передать фукнцию класса как аргумент, буду рад узнать.
сейчас работает в достаточно извращённой форме.
function callfunc(&$obj,$func,$m) {
return $obj->{$func}($m);
}
class ccc {
function aaa {
global $c;
$c = $this;
preg_replace_calback('/##([^#]+)#(#)/',
create_function('$mathes','global $c; return callfunc(&$c,"myfunc",$mathes);'
$template);
}
function myfunc( &$m )
{
switch( $m[1] ) {
case 'lalala1': return ...;
case 'lalala2': return ...;
default: return 'undef';
}
}
}
если кто знает, как передать фукнцию класса как аргумент, буду рад узнать.http://ru2.php.net/manual/en/language.pseudo-types.php#langu...
почему-то не заработало - возможно потому, что внутри класса вызывал.
а потом вообще, захотелось ещё аргументов передать
array( &$this, 'myfunc' ) );
если кто знает, как передать фукнцию класса как аргумент, буду рад узнать.А по-человечески в пхп это сделать вообще нельзя. Потому что пхп - говноязык, в котором не хватает огромной кучи приятных вещей.
Если ты только начал, советую перейти на что-нибудь нормальное, вроде java/.net.
вроде javaи как же в java передать функцию класса как аргумент?
В C# это, судя по слухам, точно есть.
Я предполагаю, что в Java функции/методы являются нормальными объектами.фигово предполагаешь
В C# это, судя по слухам, точно есть.
в сишарп это тоже не объекты, хотя их хитро передать вроде можно, но точно не объекты
А вообще, я уже много раз сталкивался с тем, что возникает какая-то идея, концепция языка, которая здорово облегчила бы жизнь, и в пхп её нет - а потом через некоторое время оказывается, что в c# это давно есть, пока что ещё ни разу не было такого, чтобы какая-то такая придуманная концепция отсутствовала в c#
пока что ещё ни разу не было такого, чтобы какая-то такая придуманная концепция отсутствовала в c#имеется ввиду придуманная тобой?
просто большинство фишек сишарпа взято с лиспа, но не все
потому полно концепций которых в сишарпе нет
delegates - разве не онооно, я с тобой не спорил
я лишь сказал что в джаве такого нет и что делегаты это не объекты
имеется ввиду придуманная тобой?Да.
просто большинство фишек сишарпа взято с лиспа, но не всеА мне казалось, что сишарп вначале был почти полной копией джавы, разве не так?
я лишь сказал что в джаве такого нетЧто, серьёзно?
и что делегаты это не объектыЭто вопрос терминологии.
А мне казалось, что сишарп вначале был почти полной копией джавы, разве не так?и?
где противоречие?
Ну как бы где джава - и где лисп?
что значит где?
джава - один из самых простейших языков
сишарп - довольно мощный
лисп - самый мощный
Джава и сишарп очень похожи, отличаются только какими-то фичами (некоторые фичи есть только в джаве, некоторые - только в сишарпе).
Лисп - что-то совершенно другое.
Некоторые задачи легче (удобнее) делать на джаве/сишарпе, некоторые - на лиспе.
Что означает твоё утверждение "лисп - самый мощный"?
Что означает твоё утверждение "лисп - самый мощный"?в рамках данного треда - там больше фич чем в джаве/сишарпе
собсна выражение что лисп самый мощный пошло с этой статьи: http://www.nestor.minsk.by/sr/2003/07/30710.html
джава по сравнению с сишарпом по количеству фич - отстой
собсна я токо две навскидку знаю фичи которые есть в джаве и нет в сишарпе, а вот наоборот - дофига
1) енамы - полноценные объекты
2) анонимные классы
джава очень консервативный язык, там токо в последнее время начали фичи добавлять, и то неспеша
сишарп же очень прогрессивный в этом плане, с каждой новой версией языка добавляется дофига всего
В пхп это делается вполне сносным образом, о человечности которого я, правда, спорить не буду. А все любители мощных языков с рюшечками идув в жопу или в тему про то, что кто-то ситает, что в WEB ООП нахуй не нужно. Этот кто-то в целом, конечно, не прав, ООП полезен даже в WEB, но вот эти ваши рюшечки из лиспа в вебе точно нахуй не нужны.
но вот эти ваши рюшечки из лиспа в вебе точно нахуй не нужны.Я понятия не имею, какие там рюшечки в лиспе. Но ты, видимо, никогда не делал на пхп сложные большие проекты. В пхп этих фич не хватает настолько, что, когда что-то делаешь - сам придумываешь эти фишки, и понимаешь, насколько они облегчили бы жизнь. Например, позднее статическое связывание (ну это уже не фича других языков, а баг пхп неймспейсы, делегаты, аспекты, try...catch...finally итд.
Кстати, ты на чём пишешь, на пхп4 или на пхп5? В пхп4 ведь тоже есть ООП!
Да, кстати - а что значит "в вебе"?
Сам я пишу на С++, просто время от времени делаю какие-то вещи на PHP для себя или для других.
- собираешься делать похожие вещи с похожими объектами, но вещи все-таки разные, и объекты тоже
- по какой-то причине не хочешь заниматься оо-шностью
Тогда тебе может десять раз за проект приспичить использовать идентификатор gamma_by_E_kT, и у тебя нет особых оснований юзать другое название, но ты хочешь быть совершенно уверенным, что по случайности не вызвал не ту функцию или не обратился к переменной-тезке.
Зачем нужны неймспейсы вообще я понимаю. Хотя их вполне заменяют классы, но иногда удобно пользоваться именно неймспейсами. А вот зачем они нужны на веб-сайтах мне не понятно. Вряд ли у вас там будет великое множество подсистем, для каждого из которых необходимо своё пространство имён.
А вот зачем они нужны на веб-сайтах мне не понятноЧто такое "веб-сайт"?
Чем "веб-сайт" отличается от обычного приложения?
Нахрена нужны делегаты и аспекты я не понимаю.Делегаты - чтобы не ебаться с их неполноценной реализацией в пхп.
Аспекты - чтобы не засирать код подобным говном:
function doSomething {
try {
RegistryCleaner::getInstance->watch;
DB::BeginTrans;
try {
//...do something...
$res = ...something...
} catch(Exception $e) {
throw new SomethingException($e);
}
DB::CommitTrans;
RegistryCleaner::getInstance->clean;
} catch(SomethingException $e) {
DB::RollbackTrans;
RegistryCleaner::getInstance->clean;
}
return $res;
}
в сотне экземпляров, когда всё могло бы уложиться в
@TransactionalCleanable function doSomething {
//...do something...
return ...something...
}
Сам я пишу на С++,О, ну по сравнению с с++ пхп, конечно, рулит. А по сравнению с ассемблером пхп так вообще мегаудобный язык.
О, ну по сравнению с с++ пхп, конечно, рулит. А по сравнению с ассемблером пхп так вообще мегаудобный язык.Нет, по сравнению с C++ PHP сосёт. Однако для веба PHP хорош. У него есть свои минусы (отсутсвие нативной поддержки юникода; геморой с реализацией отдельных функций на других языках; невозможность "ручного управления", когда это нужно (например с аплоадом файлов); сравнительно низкое быстродействие но отсутсвие навороченной поддержки ООП и сопутсвующего синтаксического сахара не из их числа. Мне ещё некоторые вещи в PHP не нравятся, и я, наверное, перейду на Python, но это к делу не относится.
Вообще мне кажется, что ты чрезчур сложно и обобщённо подходишь к задачам, которые встречаются в веб-проектах. Ну, т.е. городишь этакие всемогутеры, из-за чего тебе нужны какие-то очень хитрые штуки или приходится делать через задницу. Я, конечно, твой код не видел, так что могу и ошибаться. Просто мой опыт говорит мне, что вещи, которые необходимы при написании серьёзных десктопных приложений, совсем не нужны при написаний веб-проектов, так как там всё гораздо прямолинейнее, плюс мы полностью контролируем среду, в которой выполняется код. Серьёзный программинг начинается в вебе при масштабировании, когда приложение работает на нескольких серверах, есть несколько серверов баз данных и т.д.
раз-два 0_о
Вот в пхп, это сделано, через задницу, т.к. концепция классов/объектов там довольно убогая и высосана из пальца, но тоже делается =)
Я что-то пропустил? В джаве, как и в любом языке, где есть rt это делается на Вот в пхп, это сделано, через задницу, т.к. концепция классов/объектов там довольно убогая и высосана из пальца, но тоже делается =)
Я что-то пропустил? В джаве, как и в любом языке, где есть rt это делается на раз-два 0_окак хак сойдет, на нормальное поддерживаемое решение - не тянет.
Ну, номаным решением для такой задачи было бы создание правильного интерфейса и его использование (во всяком случае в джаве). С шарпе - делегаты, как тут из зала предлагали =)
Оставить комментарий
Phoenix
Есть шаблон, в котором имеются выражения вида ##lalala##есть функция, которая читает что-то из бд и заменяет ##lalala## на какие-то данные.
написано так:
проблема1: Я не которолирую то, что будет в $subs, а значит там может появится ##lalalala1##.
проблема2: хочется использовать шаблоны в разных местах и неиспользуемые ##lalala## заменить на что-нибудь вроде пустой строки или undef.
в манах про php нигде не сказано, как ведёт себя функция и в каком порядке происходит замена.
в общем, что делать?
ps^
код вернул
т.е. совсем не то, что хочется увидеть.
т.е. произошла замена по первому шаблону и поиск след. шаблона начался с того, что вставили