PHP: <?php if(!file_exists($modelTpl)) { trigger_error("$modelTpl не найден", E_USER_ERROR); return; } if(!is_readable($modelTpl)) { trigger_error("$modelTpl не читаем", E_USER_ERROR); return; } if(!is_dir($output)) { trigger_error("$output не директория", E_USER_ERROR); return; } $this->modelTpl = file_get_contents($modelTpl); $this->output = $output; $this->db = $db; не?
там, я думаю, имеется в виду такая структура: PHP: <?php if(!file_exists($modelTpl)) throw new Exception ("$modelTpl не найден"); if(!is_readable($modelTpl)) throw new Exception ("$modelTpl не читаем"); if(!is_dir($output)) throw new Exception ("$output не директория"); $this->modelTpl = file_get_contents($modelTpl); $this->output = $output; $this->db = $db; И ловить исключения уже в вызывающем методе. Иначе смысл генерить стандартное исключение, тут же его ловить и делать то, что в общем то спокойно делается без них. А про тройную вложенность if еще у Макконнелла написано.
так что ли получается... PHP: <?php try { $g = new ModelGenerator($db); $g->create('users'); } catch (Exception $e) { trigger_error($e->getMessage(), E_USER_ERROR); }
Volt(220) мне кажется есть смысл что то ловить, если ты специфический эксепшен используешь и предусмотрел действие это еше Simpliest ссылку на видос давал про заплатки, так мне кажется PHP: <?php try { //что то делаем } catch (MyException $e) { //тут пишем в лог try { //снова пытаемся что то делать } catch (Exception $e){ //тут уже простой Exception, если совсем ничего не выходит //trigger_error } } а чем пользуешься?
Ловить надо, иначе пользователь увидит ошибку или пустой лист, т.е. грубо говоря: PHP: <?php /*типа index.php*/ require_once('ini.php'); $core=new Core(); try{ $core->showPage(); }catch(MyException $e){ $core->showMyErrorPage(); } }catch(Exception $e){ $core->showStandartErrorPage(); } Чем хорош Java и всякие IDE для него, так это тем что тебе сразу сообщат если ты забыл заловить исключение. Я вообще использую свои исключения, которые наследуют от VoltException. Тогда можно отделить мои исключения от исключений сторонних разработчиков и стандартных PHP'шных. Так вот, этот VoltException в конструкторе логирует исключение (при желании отключается в настройках, вплоть до отключения/включения логирования конкретного класса исключений). А trigger_error он же только сообщение создает да error_handler() вызывает. Или что-то еще делает?
Volt(220) прикольно, удобно получается, у меня просто переопределен хэндлер и уже там логирование, а то что active record у тебя, как будет выглядеть поиск пользователя с двумя AND например?
Padaboo PHP: <?php Apocalipsis::start(); try{ $me->goOut(Person::UseTrain); }catch(TrainsException){ try{ $me->goOut(Person::UseCar); }catch(RoadsException){ try{ $me->goOut(Person::UseLegs); }catch(WalkException){ $me->waitForDie(); } } } Town::allDie();
Padaboo В смысле? PHP: <?php $user=new User(); $user->name='Vasa'; $user->hobbi='sleep'; $user->insert(); ?> <?php $userArr=array('name'=>'Vasa', 'hobbi'=>'sleep'); $user=new User($userArr); $user->email='a@a.aa'; $user->update(); ?>
Volt(220) Хаахахха, PHP: <?php try{ $me->goOut(Person::UseLegs); }catch(WalkException){ $me->waitForDie(); }
Volt(220) Эммм ... это что такое? Допустим есть два класса: User и Users Класс User содержит всю информацию о пользователе и любые методы манипуляции информацией только в контексте класса. Класс User не может затрагивать других пользователей. Поэтому: PHP: <?php $users->update($userInstance); ?>
Apple не, это другой паттерн, active record, там класс user сам себя записывать умеет, либо я что то не так понял http://www.phpactiverecord.org/projects ... uick_Start да и в книгах тоже mapper внутри вызывает у модели $model->save(), мне просто кажется что модель по минимуму про базу должна знать
Padaboo На практике это разумно для таких объектов как Directory, например. PHP: <?php $directory->rename("New Folder"); ?> Для User ... довольно странно и необычно ИМХО.
Строка Код (Text): new User($userArr) создает новый объект и заполняет объект(вызывая метод select) данными пользователя, которому в базе соответствует $userArr(массив поле-значение или идентификатор пользователя), или данными по умолчанию, если никто не найден. Apple Есть класс SiteUser и DBUser. SiteUser - представляет пользователя, как посетителя сайта. DBUser - по сути манипулирует данными пользователя в базе. $dbUser, если выбран из базы, имеет идентификатор и в update() его использует. А чем не нравиться?
Volt(220) да нет, тоже в принципе удобно, просто у меня 1 объект того же юзера, даже не в этом дело, методов лишних нету в нем... ну это конкретно для моей реализации, хочу нечто вроде асинхронных демонов, $mapper->find() возвращает массив с индексами соответствующими id в таблице, при старте демона
крутую штуку нашел в мануале PHP: <?php abstract class Model { public function toArray() { return $this->processArray(get_object_vars($this)); } private function processArray($array) { foreach($array as $key => $value) { if (is_object($value)) { $array[$key] = $value->toArray(); } if (is_array($value)) { $array[$key] = $this->processArray($value); } } // If the property isn't an object or array, leave it untouched return $array; } public function __toString() { return json_encode($this->toArray()); } } ?>
Padaboo PHP: <?php $user=$database->getLine("users","id=$id AND posts>=$posts"); Вы своих примеров так и не привели, кстати.
Dagdamor заставим Вась прыгать PHP: <?php $users = $map->find(new User(),"`login` = 'Vasia'"); foreach($users as $user){ $user->jump(); }
научитесь же уже правильно писать мое имя Vasya Еще уникальность e-mail'а например тоже можно задавать прямо при создании таблицы, тогда было бы удобно в маппере определить все уникальные поля, а не только id