Это правильный синтаксис PHP? - PullRequest
0 голосов
/ 23 июля 2010
if ($var == ($var1 || $var2))
{
    ...
}

Я подумываю об использовании этого, но не уверен, действительно ли оно допустимо, и, кажется, нет места для проверки.
Мне это кажется логически логичным, но я не уверен, и я не уверенУ меня нет чего-то, чтобы проверить это на близком расстоянии.
Если это действительно так, какие другие основные языки поддерживают этот вид конструкции.

РЕДАКТИРОВАТЬ: Сравнение допустимо, но не так, как я думал.
На самом деле я пытался сделать функцию in_array (), которую я только что обнаружил.

Ответы [ 5 ]

8 голосов
/ 23 июля 2010

Ваш код синтаксически допустим, но семантически, вероятно, не то, что вы хотели.

Поскольку $var1 || $var2 является логическим выражением и всегда выдает true или false . А затем $var сравнивается с результатом этого логического выражения. Так что $var всегда сравнивается с true или false , а не с $var1 или $var2 (это то, что вы, вероятно, ожидали). Так что это не сокращение от ($var == $var1) || ($var == $var2).

Теперь, как вы уже отметили, in_array - решение этой проблемы, если вы не хотите писать выражения типа ($var == $var1) || ($var == $var2), особенно если у вас есть произвольное число значений, которое вы хотите сравнить с:

in_array($var, array($var1, $var2))

Что эквивалентно:

($var == $var1) || ($var == $var2)

Если вам нужно строгое сравнение (с использованием === вместо ==), установите третий параметр на true :

in_array($var, array($var1, $var2), true)

Что теперь эквивалентно:

($var === $var1) || ($var === $var2)
2 голосов
/ 23 июля 2010

Да, исправленная версия имеет правильный синтаксис:

if ($var == ($var1 || $var2))

Вопрос в том, что это значит?

Будет сравниваться результат выражения ($var1 || $var2), который будет логическим, со значением $var.

И, как уже упоминалось, php -l file.php сообщит вам, есть ли какие-либо синтаксические ошибки.

Edit:

Учтите это:

$var1 = 1;
$var2 = 2;

echo var_dump(($var1 || $var2));

Результат:

bool(true)
0 голосов
/ 23 июля 2010

Ваш исправленный пример действителен и будет ИСТИНА, если $ var - ИСТИНА, а $ var1 или $ var2 - ИСТИНА.если $ var, $ var1 и $ var2 - ЛОЖЬ

0 голосов
/ 23 июля 2010

Как говорит Джордж Мариан, в нем отсутствует закрывающая скобка, поэтому выдается синтаксическая ошибка.Однако в остальном он действителен, поэтому я не вижу, что это логическая конструкция ИЛИ, в которой вы не увереныОн используется на нескольких языках, включая JavaScript.

0 голосов
/ 23 июля 2010

Вы можете использовать команду php -l filename.php из командной строки для проверки синтаксических ошибок.

...