ФорумПрограммированиеPHP для идиотов → Говнокод или как писать не стоит

Говнокод или как писать не стоит

  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 6 февраля 2010 г. 14:19

    Давайте в этой теме будем складывать конструкции, короткие части кода, за которые нужно программиста за яйца вешать. Говнокод одним словом.
    Например, недавно Дуд мне показал, что запрос в цикле лучше не делать.
  • Ewg777

    Сообщения: 510 Репутация: N Группа: Джедаи

    Spritz 6 февраля 2010 г. 14:22, спустя 3 минуты 26 секунд

    В юмор всегда постили
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 6 февраля 2010 г. 14:24, спустя 2 минуты 5 секунд

  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 6 февраля 2010 г. 14:25, спустя 41 секунду

    Ну я может неправильно выразился. Юмор можно и на говнокод.ру почитать.
    Тут даже больше не юмор, а что то типа как нельзя делать для новичков.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 6 февраля 2010 г. 14:28, спустя 3 минуты 8 секунд


    Ну я может неправильно выразился. Юмор можно и на говнокод.ру почитать.
    Тут даже больше не юмор, а что то типа как нельзя делать для новичков.
    юмор от новичков

    новичкам вообще ничего нельзя позволять делать (с) дуд
    Сапожник без сапог
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 6 февраля 2010 г. 14:30, спустя 2 минуты 24 секунды

    Однажды я одному человеку рассказал про try catch
    Он сказал, что это круто и заменил в своем коде все конструкции
    if (…) echo 'Ошибка';

    на
    try
    {
    if (…) throw new Exception('');
    }
    catch(Exception $e)
    {
    echo 'Ошибка';
    }


    История реальная. Этот человек даже запостил несколько сообщений на пыху.  Кто конкретно, палить не буду …
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 6 февраля 2010 г. 15:03, спустя 32 минуты 26 секунд

    AlexB, ебана
    Спустя 86 сек.
    я в одном месте хитро выебнулся, хотелось нормальной обработки исключений, а не ебаного trigger_error ..
    сделал чтото такое


    ob_start();
    func();
    $error = ob_get_clean();

    if($error)
    throw new Exception($error);


    и дальше работал ахуенно обрадовавшись :)
    Сапожник без сапог
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 6 февраля 2010 г. 16:38, спустя 1 час 34 минуты 48 секунд

    phpdude,
    ты писал, что конструкции типа
    <?php
    foreach ($a as $b)
    {
    mysql_query("SELECT `name` FROM `users` WHERE `id` = ".intval($b)).";";
    }
    ?>

    - говно.
    А как сделать правильно? У меня пару вариантов есть
    1)
    <?php
    $c = $mysql_query("SELECT `name` FROM `users`;"
    //Потом обработаем запрос с помощью while и запишем его массив $d
    foreach ($a as $b)
    {
    //теперь у нас есть два массива. Большой и малый.Обработаем.
    }
    ?>

    Говно. Имхо. Ибо если записей миллион, а взять надо две-три, то это пиздец тупость.
    2)
    <?php
    foreach ($a as $b)
    {
    //Тут сделаем переменную $where, значение которой будет id=1 or id=8 or id=15 и тд…
    }
    $c = mysql_query("SELECT `name` FROM `users` WHERE ".$where.";";
    ?>

    Он по моему лучше, чем остальные.

    А может я что то не знаю?
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 6 февраля 2010 г. 16:44, спустя 6 минут 1 секунду

    Да, вы к сожалению не знаете SQL.
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 6 февраля 2010 г. 16:56, спустя 12 минут 50 секунд

    krasun, Соглашусь пожалуй. Был бы рад небольшому комментарию по этому поводу)
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 6 февраля 2010 г. 17:12, спустя 15 минут 55 секунд

    Хочу, сказать, что все, что делаете в циклах, это все делается одним запросом. К примеру, и не надо считывать 1,000,000 записей, достаточно "Select * From … LIMIT 10", ограничится limit`ом и вы получите 10 записей. Или те же проверки, их все можно сделать в запросе.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 6 февраля 2010 г. 17:17, спустя 4 минуты 43 секунды

    вы все ебанулись,учите матчасть. один пример краше другого

    //Тут сделаем переменную $where, значение которой будет id=1 or id=8 or id=15 и тд…
    этот вариант даже хуже первого по cpu use, ибо серверу придется сравнивать ебанутся сколько условий, а в первом варианте хоть и много запросов, но они все проще этого в сотни раз.

    //теперь у нас есть два массива. Большой и малый.Обработаем.
    ебать, а если записей миллион?

    для поулчения кучи значений по ID используется конструкция

    SELECT * FROM `users` WHERE `id` IN (1,2,3,4,5,6,7,8,9,10)

    этот вариант использует все плюсы мускуля, и не создает форичей. если id - primary key то такая выборка хоть из десятков миллионов будет за доли милисекунд выполняться. гонял такие запросы на табличке в гигабайт и 5мллн записей
    Сапожник без сапог
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 6 февраля 2010 г. 17:20, спустя 3 минуты

    krasun, немного не понял. Грубо говоря.
    Есть таблица. В ней миллион записей.
    Есть массив. В ем записаны 7 айдишников. 1, 10, 100, 1000, 10000, 100000, 1000000.
    Мне нужно выбрать из из таблицы записи с этими айди.
    Лимит не катит вроде.
    А проверки в запросе это
    SELECT * FROM users WHERE id=1 or id=10 or … or id=1000000
    ?
    Спустя 71 сек.
    phpdude, блять. Точно. Причем я юзал этот ин, но забыл про него. Спасибо.
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 6 февраля 2010 г. 17:24, спустя 3 минуты 51 секунду


    SELECT * FROM users WHERE id IN(1, 10, 100, ..)
    Спустя 74 сек.


    $ids = array(1, 100, 1000, 10000);
    $in = implode(',', $ids);

    $sql = "SELECT * FROM `users` WHERE `users`.`id` IN({$in})";

    // далее обрабатывай

    Спустя 98 сек.
    phpdude, нихуя понять не могу, как ты успел написать, я только писал не куда не отходил, отправил, тут уже два сообщения, пиздец
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 6 февраля 2010 г. 17:34, спустя 9 минут 40 секунд

    phpdude, нихуя понять не могу, как ты успел написать, я только писал не куда не отходил, отправил, тут уже два сообщения, пиздец
    я в свое время пыхе уделял по 150 сообщений в день. со мной не поспоришь ;)
    Спустя 89 сек.
    kichSman, это чо за кусок говнокода?

                $block_date_ex=explode(".",trim($block_date[1]));
    $r_block_date=mktime(0, 0, 0, $block_date_ex[1], $block_date_ex[0], $block_date_ex[2]);
    $date=date('Y-m-d',$r_block_date);


    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!