Вот встретил такую запись в коде: Нигде раньше в книгах по РНР не встречал такого синтаксиса -- с вопросительными знаками и двоеточием... Как это можно это переписать в обычном синтаксисе, или поясните по-русски что сия строка кода делает? Спасибо. .
Она делает PHP: <?php if(stristr($content,'xml') or $content=""){ $content=""; } else{ $content=$content; } Вообще все это можно записать еще короче и правильнее: PHP: <?php $content=(stristr($content,'xml'))?null:$content;
Хм, спасибо. Но не совсем понятно к чему так изголяться. А есть ли где в учебнике описаный пример? Может подкинет кто-нить ссылку...
alexxxus Вообщем, то, что идет после ? - это то, что в обычном коде идет после if, а : - это else. При чем записывать можно только одину конструкцию в каждом блоке, и некоторые конструкции использовать нельзя. Например нельзя return и echo (но можно print). Простой пример: PHP: <?php $a="Слово"; $a=="Слово"?print "Правильно":print "Не правильно"; Если там ^ вместо print поставить echo, работать не будет. Зато можно так PHP: <?php $a="Слово"; echo $a=="Слово"?"Правильно":"Неправильно"; Вообщем, часто помогает сократить код.
Помогите пожалуйста "проговорить" это: Код (Text): $a="Слово"; echo $a=="Слово"?"Правильно":"Неправильно"; Пока я так смог понять: Если $a равна 'Слово', то выводить правильно,а иначе отрицательный ответ И на сколько длинные могут быть коды с тернарным оператором? Ещё, скорость работы скрипта не замедлится,если использовать этот оператор?
Jensi Эти конструкции для длинных проверок может и экономят место, но становятся ужастно неудобными и нечитаемыми. Медленней или быстрей — дело в том, что операции они проводят одинаковые в плане логических проверок. Теже преобразования, сравнения и пр, только записываются по-разному. В одних случаях они экономят место, но злоупотреблять НЕЛЬЗЯ ими, иначе код будет говеным. Вот, например, хороший стиль: PHP: <?php // Хорошо $id = isset($_GET['id']) ? true : false; // Плохо if(isset($_GET['id'])) { $id = true; }else{ $id = false; } // Плохо $str = (count(explode(', ', implode(', ', array('abc', 'def'))))) ? count(array('abc', 'def')) : null; ?> Длинна идентична блоку if() (тому, что в скобках).
Т.е. лучше этот оператор применять в маленьких проверках, так? Попробовал всё это сделать, потренировался и всё понятно стало
Тогда, когда это оправданно. Например, я считаю необправданным писать блок if-else, если у меня выражение вернет простой результат true/false. Пример я привел выше. Но когда код должен что-то делать, пускай в нем даже одна единственная инструкция, его следует заключать в блок if. Думаю сами поймете, когда будете писать возврат одной единственной строчки кода, которая ничего не делает.
PHP: <?php // Хорошо $id = isset($_GET['id']) ? true : false; // Вообще отлично $id = isset($_GET['id']); // Значение по-умолчанию $a = !empty($_GET['a']) ? $_GET['a'] : 15; Тернарный оператор - отличная штука - регулярно им пользуюсь. Многое еще зависит от форматирования. Жаль, что в пхп с ним связан серьезный баг, потому его основное удобство пропадает.