Как стать автором
Обновить

Комментарии 41

Может быть индус переопределил true и использует её в качестве переменной?
в РНР переменные начинаются с $. Без «бакса» только константы. true — глобальная константа.
define('true', false); вот и переопределена глобальная константа
define('true', false);

if(! true)
echo 'работает';
else
echo 'не работает';

выводит «не работает». PHP не дает переопределять предопределенные(глобальные как тут выражаются) константы.
Совершенно не удивлюсь, если под какойто платформой будет выводить «работает»

что то типа такого, работает под виндой/линухом по разному
${1}=«s»;
$a=1;
if($$a==${1}) echo 'работает';

а вы уверенны что отличается только платформа, а не версия php?
2 Vas3K: либо у вас нет чувства юмора, либо вы плохо готовите индусов — они и не на такое способны.
скорее всего это результат работы «механического оптимизатора». вполне возможно что раньше вместо true там стояла переменная, которой еще раньше присвоили TRUE и больше значение в ней не меняли. «Оптимизатор» заменил переменную ее значением, а вот блоки типа if(true) он выкоцывать не умел…

ну или вместо «механики» использовали «search and replace» не удосужившись провести ревизию кода после замены :)
странный способ оптимизации… Тут помоему стоит обратить внимание не на
блоки типа if(true) он выкоцывать не умел
а скорее на вечный цикл while… эт помоему пострашнее ифа)
Нет там бесконечного цикла, там цикл всегда выполняется однажды.
я просто не вижу насильного выхода из цикла, а логическая операция в описании цикла имеет значение константы…
Конструкция return false для неопределенного цикла мне к сожалению неизвестна
return — выход из текущей функции, в т. ч. сразу из всех возможных циклов.
Спасибо… буду знать… Поидее можно было додуматься… Но не старался видимо=) Теперь все ясно)
Как вариант — во время разработки было какое-то «человеческое» условие, от которого решили избавиться, закомментировав само условие и поставив вместо него такую вот «заглушку». Потом про него благополучно забыли, а перед выходом проекта в свет порезали все комментарии.
это дзен-код, служащий для поднятия кармы
хм… а как же тогда работает граббер ?? он волшебный?
он просто не работает: D
Хабр порвал Вам смайлик!
D:
НЛО прилетело и опубликовало эту надпись здесь
надеюсь, Вы их научили писать по-другому
НЛО прилетело и опубликовало эту надпись здесь
Обычное дело, часто такое вижу в студенческих прогах: просто механическая запись условия задания в код, когда не выспался да не понимаешь, ещё не то напишешь. А ещё бывают перлы типа
if (l[0]+l[1]+l[2]+l[3]+l[4]=='i'+'n'+'p'+'u'+'t')
вместо strncmp и sizeof вместо strlen :), но это немного из другой оперы…
На самом деле это шутка. Ну правда. Не бывает конченых кретинов которые пишут неплохие CMS.
Интересно, как же граббер тогда работает.
а что там не должно работать?
return отрабатывается, цикл прерывается.
вы бы название файла написали, чтобы проверить.
у меня это 364 строка в

engine/inc/plugins/rss.classes.php
Причем, ручная.
Удалось мне как то связаться с этим движком. Я вообще в ужасе остался как он работает, но работает. Хотя я какраз таки и познакомился когда надо было сделать чтобы он работал :)
ИМХО остатки от дебага, забыли почистить
Точно, это отладка какая-то. Кодревью надо.

А (фантастичная версия) цикл по идее нужен для обработки массива сообщений (или вложенных ошибок, если там такие бывают). Но потом оставили один сообщение, и хитровывернуто сделали один проход в цикле.
а оно внутри функции лежит или так? просто если в функции, то оно прервет и выполнение бесконечного цикла и функции… а если просто в коде то на «return false;» отстановится выполнение скрипта
судя по $this это происходит в методе класса
действительно… я и не обратил внимание… вот что значит в три ночи каммент писал…
Экстремальное программирование, вырожденный случай. И успешно забытый.
Пишем функцию вычисления синуса. Сначала тест:
assert_equals 0, sin(0)
функция:
def sin { 0 }
срабатывает!
Добавляем в тест:
assert_equals 1, sin(PI/2)
ломается, рефакторим…
Тут, видимо, остановились на пол-пути :)
К сожалению (может быть), ДЛЕ зарекомендовал себя как движок для «варезных» помоек, нормальных сайтов на нем очень мало.

P.S. Из DLE и WP выбрал последний, хотя из из проектов работает на дле.
DLE весь так написан. =)

А чем плох код?
Работает? Да!!!
А тот кто написал просто умница!
Посмеялся над многими «ботанами»
Желаю Вам не забывайте что вы не роботы а
Люди!

Чисто юзерский интерес через смену технологий:

Этот код представляет собой бесконечный цикл, который всегда будет возвращать false при каждом выполнении итерации. Давайте разберем его пошагово:

  1. Бесконечный цикл: while (true) указывает на то, что цикл будет выполняться бесконечно, так как условие всегда истинно.

  2. Установка сообщения об ошибке:

    $this->errormsg = 'Connection failed (' . $errno . ')';
    $this->errormsg .= ' ' . $errstr;
    

    Эти строки кода устанавливают сообщение об ошибке, объединяя строку 'Connection failed (' с переменной $errno, затем добавляют значение $errstr к сообщению об ошибке.

  3. Отладка:

    $this->debug($this->errormsg);
    

    Эта строка вызывает метод debug, передавая ему сообщение об ошибке для отладки.

  4. Возврат значения:

    if (true)
    {
        return false;
    }
    

    Внутри цикла есть условие if (true), которое всегда истинно, и оно заставляет функцию возвращать false и выходить из текущей итерации цикла. Однако, поскольку это внутри бесконечного цикла, цикл будет повторяться и снова возвращать false.

  5. Цикл начинается заново: После возврата false, цикл начинает новую итерацию и снова выполняет те же действия.

Итог

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории