Еще одна бага:
При вводе пасворда, любой длинны (больше шести символов) в форме восстановления пароля (когда просят ввести два раза новый), то форма отвечает мне, что надо бы не жадничать и ввести пароль более шести символов.
Мучался долго, и ближе к вечеру все таки вспомнил старый. Спасибо вам…
Я думаю вероятность встретить гавношаблонный код дергающий пхп функции из xslt-шаблона, увеличится в разы, когда большая часть людей узнает, что вообщем-то можно дергать пхп функции из xslt...
А после этого чудного флешбека придет понимание, что смысла дергать каждый раз базу данных - вообщем-то и нету, многое можно просто закэшировать.
А менять удобство и скорость разработки на написание десятка тыщ строк кода, который сложен в поддержке... думаю прикупить еще один сервер - будет самым разумным решением.
Это не мега круто. Просто это действительно удобно, правильно и имеет очень много плюсов (и примерно столько же минусов, ведь ничего соверешнного нету) по сравнению с процедурным стилем.
Попробуйте в процедурном стиле поработать с десятками связанных сущностей, которые разбросанны по нескольким источникам данных. Думаю что через три часа мучений вы первый побежите набрасывать два слоя абстракций модели данных и еще орм сверху.
Действительно??? Нет, вы правда в этом уверенны? Просто... я наверное хочу признатся, что у меня, к великому моему сожалению, вышел неправильный ActiveRerod, давайте я вам приведу небольшой пример, что бы вы сами поняли
$user = new User();
$user['username'] = 'root';
$user['password'] = 'qwerty';
$user->usergroup['name'] = 'admins group!';
var_dump($user['usergroup'], $user->usergroup);
$user->save();
на что собственна в бд получим:
user(id, username, password, usergroup, email):
1231, root, md5(qwerty), 91231, root@thishost.com
Очень, очень хочется посмотреть на то, как второй кусок кода будет вписан в mvc(в народе: разделим наше приложение на шаблонизатор, самописный класс\функции для работой с бд, и будем их дергать в контроллере, кидая в шаблонизатор).
Почему же не вижу, вижу, в первом кусе я забыл убрать $users = array(), а во втором foreach появился ;)
И действительно, эта статья очень поможет начинающим программистам, дав понять, как не стоит писать, даже если "очень очень" хочется.
А можно поинтересоватся, где тут облегчение мне жизни? То, что я теперь буду работать с голыми данными из базы, но используя другую функцию, если раньше мы писали так
$result = mysql_query("SELECT * FROM users");
$users = array();
while ( $row=mysql_fetch_array($result) ) {
// много кода, в котором мы что-то делаем с row, к примеру
}
то сейчас мы будем писать так что-ли:
foreach(sql_get_rows("SELECT * FROM users") as $row) {
// абсолютно тот же код.
}
Люди, наверное не зря придумали такие вещи как Абстракция бд, модель данных, activerecord, datamapper.
Когда же вы научитесь учится сами, прежде чем учить чему-то других...
Насчет первого момента, Fatal Error-ы в пыхе не перехватываются. Нет, конечно перехватить их можно, но... это делается через такую жопу, что это никому и ненужно.
Насчет варнингов в пхп все очень тонко. К примеру по варнингу от mysql_connect, можно выкидывать эксепшн - потому, как варнинг нам сообщит о том, что мы не смогли приконнектица к бд, в том же foreach-е если он будет выкидываца - тоже будет хорошо, потому как сразу заставит посмотреть почему же у нас иногда не те данные имеюца (и такое поведение имхо хорошо и для варнингов с киданием заголовков и кук)... но вот в случае с DOMDocument::loadHTML - такое поведение будет неочень хорошо, потому как он же html нормально распарсит, но кинет варинг, а использовать @ или пустой catch - не очень красиво.
Ксате интересный пример использования исключений, правда я все таки считаю что не для такого они предназначены (все таки неправильно введеные данные пользователем - это нормальная ситуация), и в реальной жизни применять их в этой ситуации не стоит... Но я бы еще добавил Countable, и строчку if((bool)$e->current()) { заменил бы на if(count($e)) {
Можно начать с того, что все таки в данном случае мы проверяем есть ли у нас такая переменная, или нет. isset логически подходит сюда гораздо больше.
И продолжить тем, что обращатся напрямую к посту, в нормальном приложении - дурной тон, как уже было сказанно выше (с приведенными примерами), лучше написать функцию\класс для работы с енвиронментом. Вопервых, мы избавим себя от рутинного кода в будущем, во вторым - сократим количество потенциальных дыр и улучшим читабельность.
В треитьих, посудите сами как будет выглядить такой код, если нам нужно будет вытащить несколько переменных из поста\гета?
При вводе пасворда, любой длинны (больше шести символов) в форме восстановления пароля (когда просят ввести два раза новый), то форма отвечает мне, что надо бы не жадничать и ввести пароль более шести символов.
Мучался долго, и ближе к вечеру все таки вспомнил старый. Спасибо вам…
сегодня не видел
class Foo {
function bar() {
return $this;
}
}
$foo = new Foo();
$foo->bar()->bar()->bar();
А менять удобство и скорость разработки на написание десятка тыщ строк кода, который сложен в поддержке... думаю прикупить еще один сервер - будет самым разумным решением.
Попробуйте в процедурном стиле поработать с десятками связанных сущностей, которые разбросанны по нескольким источникам данных. Думаю что через три часа мучений вы первый побежите набрасывать два слоя абстракций модели данных и еще орм сверху.
$user = new User();
$user['username'] = 'root';
$user['password'] = 'qwerty';
$user->usergroup['name'] = 'admins group!';
var_dump($user['usergroup'], $user->usergroup);
$user->save();
на что собственна в бд получим:
user(id, username, password, usergroup, email):
1231, root, md5(qwerty), 91231, root@thishost.com
а в Usergroup(id, name):
91231, admins group!
в браузере увидим что-то вроде
int 123
object(Usergroup)[2]
protected 'properties' => array(...)
Эх, придется все переписывать... а было так удобно...
Почему же не вижу, вижу, в первом кусе я забыл убрать $users = array(), а во втором foreach появился ;)
И действительно, эта статья очень поможет начинающим программистам, дав понять, как не стоит писать, даже если "очень очень" хочется.
$result = mysql_query("SELECT * FROM users");
$users = array();
while ( $row=mysql_fetch_array($result) ) {
// много кода, в котором мы что-то делаем с row, к примеру
}
то сейчас мы будем писать так что-ли:
foreach(sql_get_rows("SELECT * FROM users") as $row) {
// абсолютно тот же код.
}
Люди, наверное не зря придумали такие вещи как Абстракция бд, модель данных, activerecord, datamapper.
Когда же вы научитесь учится сами, прежде чем учить чему-то других...
if(!$connection) {
throw new ModelConnectionException('я нисмог приконектицо к базеданых')
}
А эксепнш будет кинут по варнингу.
Насчет варнингов в пхп все очень тонко. К примеру по варнингу от mysql_connect, можно выкидывать эксепшн - потому, как варнинг нам сообщит о том, что мы не смогли приконнектица к бд, в том же foreach-е если он будет выкидываца - тоже будет хорошо, потому как сразу заставит посмотреть почему же у нас иногда не те данные имеюца (и такое поведение имхо хорошо и для варнингов с киданием заголовков и кук)... но вот в случае с DOMDocument::loadHTML - такое поведение будет неочень хорошо, потому как он же html нормально распарсит, но кинет варинг, а использовать @ или пустой catch - не очень красиво.
И продолжить тем, что обращатся напрямую к посту, в нормальном приложении - дурной тон, как уже было сказанно выше (с приведенными примерами), лучше написать функцию\класс для работы с енвиронментом. Вопервых, мы избавим себя от рутинного кода в будущем, во вторым - сократим количество потенциальных дыр и улучшим читабельность.
В треитьих, посудите сами как будет выглядить такой код, если нам нужно будет вытащить несколько переменных из поста\гета?