Хотел бы узнать. Есть ли смысл создавать движ по классу. Т.е. в index создаётся класс, с кучей всего. Там всякие таблички, выводы, расчёты. При чём, заходит минимум данных, обратабываются и выплёвывает уже конечная инфа передающиеся в смарти (или другому шаблонизатору, не столь важно). При этом хотел бы узнать плюсы и минусы такой системы. Ваши идеи почему "хорошо" и почему "плохо" .... На данный момент у меня не так. Есть к примеру страница items.php в которой обрабатывается только то что указано в ней, на неё входят $_POST/$_GET + db connect. Если же я инклудю её в другой странице то много "лишнего подключается" (хотя оно и не мешает, но всё же лишнее). Если взять слова выше то items.php превратится в "метод" (если я правильно трактую понятие метода) класса создаваемом index'ом. Хотел бы услышать ваши мысли на этот счёт.
слабое понимание что такое архитектура вообще. почитайте хоть инфу какую на эту тему прежде чем постить?
И зачем? Что б потом опять придти спрашивать, а вы "такие все умные" опять "иди читай дальше".. Теперь видно откуда такие цыфры в кол. постах. Лучше уж тогда ссылкой послали, а не перенося топик.. =\ PS: Сейчас читаю http://habrahabr.ru/blogs/about_cms/51152/ ...
Почитай http://habrahabr.ru/blogs/php/31270/ . Кое-что не раскрыто, кое-что раскрыто достаточно сумубрно, кое-что неверно, а кое-что некрасиво, но в какую сторону копать, чтобы найти верные/интересные идеи — представление мне дало.
running-frag правильно излагать мысли надо уметь для начала, а не выплевывать... Херовая задумка у тебя.
LOL Ну то что мне и нужно было. "Подсрачника и манки"... Всё уже, куда бежать и над чем думать уяснил. СПС...
running-frag Зря ерепенишься. Обсуждать что-либо можно с теми кто примерно равного с тобой уровня. В остальных случаях ты или объясняешь что делать, или тебе объясняют что делать. Но для того чтобы тебе объяснили - нужно таки уметь формулировать свои мысли. У тебя сейчас недостаток общей терминологии. То, что ты поднял в топике - не имеет отношения к архитектуре движков вовсе. Но имеет отношение к парадигме программирования - ООП. (распространенное явление - заголовок спрашивает об одном, а пост совершенно о другом). А из-за твоего вопроса, тебя таки послали (и ты сам полез) читать о движках. Хотя стоило бы начать с ООП. Потому что объяснение того же MVC, Registry да и вообще почти всех паттернов идет на ООП-примерах. А реализовать тот же MVC можно и процедурно...
Ну в терминологии, это да, я явно не знаюсь. Ты меня походу не правильно понял. После поста 440Hz я уже понял что моих знаний не хватает. Образование к сожалению другое. Мне нужны "подсказки" в виде сыллко где читать и наводки на что обратить внимание. Фишки типа "напишите за меня" не катят... Отсюда Никаких там "ерепенишься" (с) всё ровно.
Mr.M.I.T. О! "ЕС! Ес .... Гёрл, гёрл..." (с) СПС, будем думать головой.... ) TheShock А кто сказал что меня не устраивает? Я букую всё. И читаю. ^_^
Тут такое дело... Короче я зациклился на одном и не могу решить это. Точнее не могу понять саму логику процесса. Допустим есть два класса (могут быть ошибки в коде, но это сейчас не столь важно, меня интересуеют сама логика). Класс DB PHP: <?php class db_connect { var $num_rows = 0; var $connectID = 0; var $queryID = 0; // connect db function connect ($host, $user, $pass, $name) { $this->host = $host; $this->user = $user; $this->pass = $pass; $this->name = $name; $_link = FALSE; $this->connectID = @mysql_connect($this->host, $this->user, $this->pass, $_link); if (!$this->connectID) { print "Could not connect to server: <b>{$this->host}</b>.<br>"; exit; } //else { print "Connected to server...<br>"; } if(!@mysql_select_db ($this->name, $this->connectID)) { print "Could not open database: <b>{$this->name}</b>.<br>"; exit; } //else { print "DB selected...<br>"; } // unset data unset($this->host); unset($this->user); unset($this->pass); unset($this->name); } function query($_sql) { $_qry = @mysql_query($_sql, $this->connectID); if (!$_qry) { return FALSE; } else { $this->queryID = $_qry; $this->num_rows = @mysql_num_rows($this->queryID); } } function fetch_array_all() { if ($this->queryID) { while ($_row = mysql_fetch_assoc($this->queryID)) { $_return[] = $_row; } return $_return; } else { print "\$this->queryID not isset.<br>"; } } ?> И есть какое то подобие на контроллер... (код чужой, взят с http://chtivo.webhost.ru/articles/mvc.php) PHP: <?php class Controller { private $error; private $result; function __construct() { $this->error = false; $this->result = false; } function processData() { $this->userRequest(); if ($this->error) View::displayError($this->error); else if ($this->result) View::displayResults($this->result); else View::displayDefault(); } function userRequest() { // данные отправлены if (isset($_POST['send'])) { $this->validate(); if (!$this->error) { // основные вычисления $model = new Model(); $model->calculate($_POST['name']); $result = $model->getData(); // проверка на ошибки в самой модели if (!is_array($result)) $this->error = $result; else $this->result = $result; } } } function validate() { if (empty($_POST['name'])) $this->error = 'Не введено имя!'; else if (strlen(strval($_POST['name'])) < 3) $this->error = 'Имя слишком короткое!'; } } // class Controller class View { static function displayDefault() { echo "<form method='POST' action=''>"; echo "<p>Введите имя: "; echo "<input type='text' name='name' value=''> "; echo "<input type='submit' name='send' value='Отправить'>"; echo "</form>"; } static function displayError($error) { echo "<p><b>Ошибка:</b> {$error}"; View::displayDefault(); } static function displayResults($results) { echo "<p><b>Результаты:</b>"; echo "<p>Ваше имя <b>".$results[0]. "</b> означает <i>".$results[1]."</i>"; echo "<p><a href='".$_SERVER['REQUEST_URI']. "'>Узнать ещё об одном имени</a>"; } } // class View class Model { private $data; function __construct() { $this->data = false; } function calculate($name) { $this->data[] = $name; $len = strlen($name); if ($len == 3) $this->data[] = 'краткость - сестра таланта'; else if (($len > 3) && ($len < 6)) $this->data[] = '...нет особого значения'; else $this->data[] = 'невероятно богатая фантазия родителей'; } function getData() { if ($this->data) return $this->data; else return 'Вычисления не произведены!'; } } // class Model $controller = new Controller(); $controller->processData(); ?> В контролере наглядно видно что можно в любой части кода вызвать view::XXXX , а вот как сделать для моего класса бд? Вторые сутки не могу ответа найти. Скорее не найти а додуматься.. =\
Да... И исключаем тот случай когда... PHP: <?php class db_connect { var $num_rows = 0; var $connectID = 0; var $queryID = 0; // connect db function connect () { $this->host = "host"; $this->user = "user"; $this->pass = "pass"; $this->name = "db_name"; $_link = FALSE; ... ?>
тебе надо смотреть в сторону синглетона PHP: <?php class Db { static function getInstance() { static $instance = false; if($instance === false) $instance = new Db(); return $instance; } } и потом в любом месте кода пишешь Db::GetInstance()->Query('SELECT...'); только надо обработать connect() правильно т.е. в любом методе смотреть есть ли коннект или если его нет, коннектиться
440Hz СПС большое. Гугл много интересного по этой теме показал. Будем дальше читать. XD kostyl "Лучше почитай" (с) Капитан очевидность сегодня нас не посетил. Читать всё подрят это хорошо, много чего интересного можно узнать. Но только не по делу. Сейчас я приследую определённую цель, линк на хороший пример оказался бы намного лучше твоего поста выше. PS: СПС хоть не посылаете. ^_^
В общем виде получил вот такое: PHP: <?php class db { var $num_rows = 0; var $connectID = 0; var $queryID = 0; private static $inst = NULL; private function __construct() {} private function __clone () {} public static function check () { if (self::$inst == NULL) { self::$inst = new db (); } return self::$inst; } public function connect ($host, $user, $pass, $name) {} public function query ($_sql) {} public function fetch_all () {} public function fetch ($rowSeek) {} private function free_result () {} } db::check()->connect("host", "user", "pass", "db_name"); db::check()->connectID; $_sql = "select * from _users"; db::check()->query($_sql); //db::check()->queryID; db::check()->fetch_all(); db::check()->fetch(0); ?> PS:440hz ещё раз спс за подсказку.
конструктор объяви приватным. А то наинстанцируешь себе синглтонов. upd: прошу прощения, не заметил. все там на месте.