"Дядя, что я сделал неправильно?" aka порка кода

Sender

Новичок
berkut
по поводу твоего разборщика, сборщика URL'ов.
Не удобнее ли его будет и сборку и разборку написать на основе preg_match, preg_replace и т.п.? Задаем шаблоны url, указываем таргетинг полученных результатов на массивы и т.п. Так мне кажется пластичнее бы получилось. При смене URL, добавления его нового вида достаточно добавить/переписать новый шаблон URL и мета-данные таргетинга
 

StUV

Rotaredom
[off]
опасный раздел
так можно без работы остаться =)))
[/off]
 

berkut

Новичок
Sender я уже об этом писал. пластичнее, но гораздо медленее, а с урл иногда приходится возиться много.
поэтому я сделал абстрактный класс - где нет нестандартных урл - всё будет работать быстро. абстрактный класс - он как рисунок - в дочернем нужно только определить абстрактные методы + добавить по вкусу и всё будет работать) наверное

---
перечитал поток сознания - понял, шо йа блондинко
 

Духовность™

Продвинутый новичок
а я вот никак не могу научиться мыслить ООПодходом, хотя и уже понимаю, что он мне нужен оччень сильно (

¢
 

dark-demon

d(^-^)b
> То, что ты записываеш в достоинства триггера, является его недостатками,
> и именно они подтолкнули к разработке исключений.

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

StUV

Rotaredom
почему, например
и правда - почему?
почему бы нужный кусок кода не выделить в нормальный
try
{
...
}
catch (LogWriteException $e)
{
//какой-нить tools::kickAdmin('верните права!!!');
}
причем не на верхнем уровне - а именно код _ответственный_ за запись в лог

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

dark-demon

d(^-^)b
> почему бы нужный кусок кода не выделить в нормальный try

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

PHP:
function log_me( ){
  try{
       if( !is_writable( 'log.log' ) ) throw new Exception( 'kick admin' );
  catch( Exception $e ){
       //какой-нить tools::kickAdmin('верните права!!!');
  }
}
 

StUV

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

+
у каждого приложения свои требования
поэтому фантазии о месте размещения этого try...catch ничем не ограничены - это может быть и tools::file::write, и что угодно

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

-~{}~ 29.01.08 17:58:

зы:
все это реализуемо и в чисто процедурном подходе, и на триггер_еррор
так сказать - вопрос удобства/масштабируемости
для меня @@ и trigger_error в крупном проекте - первый признак "заплаточности" кода - вылез баг, быстренько пофиксили и забыли - работает и хсним
 

dark-demon

d(^-^)b
> я где-то утверждал обратное ?.. =)

то есть ты подтверждаешь, что используешь конструкцию, которую я привёл в своём последнем посте?


> для меня @@ и trigger_error в крупном проекте - первый признак

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

StUV

Rotaredom
конец диалога.
;)

-~{}~ 29.01.08 18:25:

function log_me( ){
try{
if( !is_writable( 'log.log' ) ) throw new Exception( 'kick admin' );
catch( Exception $e ){
//какой-нить tools::kickAdmin('верните права!!!');
}
}
то есть ты подтверждаешь, что используешь конструкцию, которую я привёл в своём последнем посте?
ответ на данный вопрос в такой формулировке - "однозначно нет"

в той конструкции, которую я использую, тоже встречаются слова function, try, catch, throw, log, new, Exception
но оформлены они несколько иначе
такой ответ устраивает?
 

atv

Новичок
dark-demon, загляни сюда . Там очень доступно объясняется назначение исключений. Вопрос о том, где ставить try {} catch, полностью определяется требованиями к приложению, классу и т.д.

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

dark-demon

d(^-^)b
> Если по требованиям твоего приложения это не должно приводить к неработоспособности, то и не кидай исключение вообще.

об чём и спич. однако уведомить админа надо. и именно для этого и служит trigger_error.

-~{}~ 29.01.08 21:14:

ps: да и исключения в пыхе - вообще сказка... нет ни rethrow, ни finaly, только type-catching быстрый и всё...
 

atv

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

да и исключения в пыхе - вообще сказка... нет ни rethrow, ни finaly
А это что - "rethrow" ? И зачем тебе finally?
 

dark-demon

d(^-^)b
> Ну так и уведомь админа, а триггер зачем?

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


> А это что - "rethrow" ?

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


> И зачем тебе finally?

ну, например, закрыть начатую транзакцию.
 

berkut

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

kode

never knows best
PHP:
try{

}catch(Exception $e){
//Не могу обработать
throw $e;
}
НАРОД УЖЕ ПОШЁЛ ЖЁСТКИЙ ОФФТОПИК, RTST, or all your base are belong to us
 

dark-demon

d(^-^)b
гм.. видимо криво проверял.. да, тогда и finally через него сэмулировать можно..
 
Сверху