Блок if-сравнений в php

Рейтинг: 0Ответов: 2Опубликовано: 16.03.2015

Можно ли вместо этого -

if( ($type == 'smth1') || ($type == 'smth2') ) {}

Написать так -

if( $type == ('smth1' || 'smth2')) {}

?

Ответы

▲ 3Принят

нет, выражение в скобках ожидаемо приведется к bool

▲ 1

Условия приводятся к булеву типу. Скобки заставляют сначала выбрать одну строку. Приведение строки smth1 вернёт ожидаемое true, второе даже высчитываться не будет. Значение переменной $type проверят с вернувшейся строкой. Т.е. всегда будет проверятся первое значение (если, конечно, оно при приведении не даёт false). Без вариантов.

Решение может быть типа такого:

<?
$type = 'smth1';
$opts = ['smth1', 'smth2']; // Варианты значений
if(preg_match("!^(" . implode('||', $opts) . ")$!", $type))
    print 'Found!';
else
    print '[404]';