Условное сокращение для определения переменной на основе существования другой переменной в PHP - PullRequest
18 голосов
/ 17 сентября 2010

По сути, я хотел бы иметь возможность определять переменную как одну вещь, если эта вещь не существует.Я клянусь, что где-то я увидел условное условное обозначение, которое выглядело примерно так:

$var=$_GET["var"] || "default";

Но я не могу найти какую-либо документацию, чтобы сделать это правильно, и, честно говоря, это мог быть JS или ASP или что-то, где явидел это.

Я понимаю, что все, что должно происходить в приведенном выше коде, это просто проверить, возвращает ли какое-либо утверждение значение true.Но я думал, что видел, как кто-то сделал что-то, что по существу определило дефолт, если первый потерпел неудачу.Об этом кто-то знает и может мне помочь?Я сумасшедший?Просто кажется излишним говорить:

$var=($_GET["var"]) ? $_GET["var"] : "default";

или особенно излишне говорить:

if ($_GET["var"]) { $var=$_GET["var"]; } else { $var="default"; }

Мысли?

Ответы [ 3 ]

14 голосов
/ 17 сентября 2010

Мэтью уже упомянул единственный способ сделать это в PHP 5.3.Обратите внимание, что вы также можете связать их в цепочку:

$a = false ?: false ?: 'A'; // 'A'

Это не то же самое, что:

$a = false || false || 'A'; // true

Причина в том, что PHP похож на большинство традиционных языков в этом аспекте.Логическое ИЛИ всегда возвращает true или false.Однако в JavaScript используется последнее выражение.(В серии OR это будет первый не ложный.)

var a = false || 'A' || false; // 'A' 
var b = true && 'A' && 'B';    // 'B';
8 голосов
/ 17 сентября 2010

В таких случаях вы должны проверить наличие переменной в $ _GET, а затем проверить, является ли она допустимой для ваших параметров.Например:

$var = (isset($_GET["var"]) && $_GET['var'] !== '') ? $_GET["var"] : "default";

Однако, это может стать довольно нечитаемым довольно быстро.Я бы сказал, чтобы он оставался читаемым, сначала инициализируя вашу переменную безопасным значением по умолчанию, а затем перезаписывая ее внешней, если это действительно так:

$var = "default";
if (isset($_GET['var') && $_GET['var'] !== '') {
    $var = $_GET['var] ;
}

Как и в первом примере, $var=$_GET["var"] || "default"; существует вJavascript: var someVar = incomingVar || "default";

3 голосов
/ 02 июня 2014

Я всегда использовал пустой.

$var = !empty($_GET['var'])?$_GET['var']:'default';
...