- 1
if (FALSE !== strpos($this->lin{$i},$this->o)) {
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+150.9
if (FALSE !== strpos($this->lin{$i},$this->o)) {
я б до такого сравнения даже в кошмарном сне бы не додумался.
Йода мастер писал код этот.
И что вас здесь смутило? Обычная техника предотвращения возникновения ошибок сравнения еще на стадии "компиляции".
Нормальная практика сравнения с выводом константы на первое место для предотвращения ошибок со сравнением.
Нормальная-то она нормальная, но выглядит всё равно жутко. o_O
хм. как по мне, так лучше ошибиться со знаком равно и потом поискать ошибку несколько минут, чем потом тратить время на разбор вот таких закорючек.
гм. Постоянно пишу подобное. Вот только что чиста на афтомате написал:
выходит тяжелое наследие Ц и гдб сыграло со мной злую шутку и я теперь говнокодер? Какая жалость.
нет, я не говорю что такой вариант плохой, просто в данном варианте не понимаю зачем так извращаться и мучить программистов, которые после будут разбираться в твоем коде, не проще написать вот так,
if ($this->lin{$i} == $this->o){
[quote= yubuy]нет, я не говорю что такой вариант плохой, просто в данном варианте не понимаю зачем так извращаться и мучить программистов, которые после будут разбираться в твоем коде, не проще написать вот так[/quote]
Не проще и даже НЕ правильно. Ваш пример работает на равенство, а исходный на поиск подстроки.
[quote=Иван]Не проще и даже НЕ правильно. Ваш пример работает на равенство, а исходный на поиск подстроки.[/quote]
вы думаете результат будет различаться если я попбробую, найти в строке длинной в 1 символ символ и если я сравню эту строку с символом?
[quote=Иван]Не проще и даже НЕ правильно. Ваш пример работает на равенство, а исходный на поиск подстроки.[/quote]
вы думаете результат в данном случае результат будет различаться если я попбробую, найти в строке длинной в 1 символ символ и если я сравню эту строку с символом?
Если $this->lin{$i} будет начинаться с $this->o, то strpos выдаст 0, а 0 равнозначен false в булевых проверках для пыха.
Вот и приходится использовать false !== strpos(a,b)...
И это стандартная практика.
[quote=yubuy]вы думаете результат в данном случае результат будет различаться если я попбробую, найти в строке длинной в 1 символ символ и если я сравню эту строку с символом?[/quote]
Нет контекста и я не телепат. Если предполагается, что величины будут всегда иметь одинаковую длину, то лучше заменить на равенство. Но приведенный пример НЕЛЬЗЯ заменить равенством.
Если $this->lin{$i} будет начинаться с $this->o, то strpos выдаст 0, а 0 равнозначен false в булевых проверках для пыха.[/quote]
я вс наверно огорчу.. для этого можно юзать оператор "===". либо !(условие)===true; хотя это то-же говнисто выглядит.
[quote]либо !(условие)===true[/quote]
Гениально!
А чем же, по вашему, хуже
[quote]FALSE !== (условие)[/quote]
из примера?
http://php.net/strpos
Ума хватает лишь на то, чтоб называть непонятое Вами говнокодом?
епмарек.
я абсолютно ничего не имею против таких конструкций как FALSE !== (условие) и т.д. но блин в данном варианте не проще вместо вот этого
if (FALSE !== strpos($this->lin{$i},$this->o)) {
написать $this->lin{$i} == $this-o?
еще раз объясню для тех неговнокодеров, которые поленись разобрать что делает этот код. ищется подстрока this->o в строке $this->lin{$i}. знаете что значит {$i} вытаскиваеся символ, ОДИН символ из $this->lin. Так на какой хер так сравнивать а? Это хороший код?
2 говнокодер yubuy:
Все поняли что ОДИН символ, и это бессмыслено, если операнды - строки. Но если нет, то начинаются различия. На "==" однозначно менять НЕЛЬЯ.
$a = '';
$b = 0;
if ($a{0} == $b) - сработает
if (FALSE !== strpos($a{0},$b)) - нет
Аналогично и другие варианты.
Вообще, тут лучше использовать "===" вместо "==", но все равно различия есть.
я в шоке
нет ну я конечно тоже пробегая беглым взглядом подумал что $this->lin{$i} это строка
но когда присмотрелся увидел скобки и понел что это всеголишь один символ
to #19 действительно говногость
перво наперво этот код выдает ошибку Notice
ну и нафига заморочки со strpos()