Как называется эта конструкция присваивания? И вы можете сделать это в Php? - PullRequest
3 голосов
/ 15 ноября 2010

Я часто использовал следующую конструкцию в Javascript:

var foo = other_var || "default_value";

В Javascript, если левая сторона ложная, тогда присваивается значение с правой стороны.

Это очень удобно и экономит написание длинных и излишне явных троичных выражений.

Есть ли название для такой конструкции?

Бонус: есть ли уловка, чтобы сделать это в Php без использования троичного оператора?

PS: другой вариант - выдать ошибку, если вы не получите истинное значение, вместо указания значения по умолчанию:

var foo = something || alert("foo is not set!");

Ответы [ 5 ]

2 голосов
/ 15 ноября 2010

Логический оператор (или обычно ||) во многих языках кардинально отличается.

В некоторых (например, C, C ++ ) это работает следующим образом: "Оценить левую часть; если это правда, вернуть true, иначе вычислить правую сторону и вернуть true, если в противном случае это правда или ложь. " Результат всегда логический.

В других (например, Javascript, Python , я полагаю, что PHP также) это больше похоже на: "Оцените левую часть; если это правда, верните ее, иначе оцените правую - стороны и вернуть результат. " Тогда результат может быть любого типа, и вы можете сделать такие конструкции, как:

a = (b || c); // equivalent to a = b ? b : c;

или довольно необычно:

function compare(A, B) { // -1 if A<B, 0 if A==B, 1 if A>B
    return B.x - A.x || B.y - A.y;
}
1 голос
/ 15 ноября 2010

Это работает:

$mytruevalue = true;
$foo = $mytruevalue or $foo = "20";
echo $foo;

Выше напечатано "1", потому что это строковое представление true ($mytruevalue верно).

$myfalsevalue = false;
$foo = $myfalsevalue or $foo = "20";
echo $foo;

Это,однако печатает "20", поскольку $myfalsevalue ложно.

Если оба значения равны false, ничего не печатается.

Надеюсь, это поможет.

1 голос
/ 15 ноября 2010

Это просто логический оператор ИЛИ . Перейдите по ссылке для получения дополнительной информации в JavaScript.

Из примеров в документации:

o1=true || true       // t || t returns true
o2=false || true      // f || t returns true
o3=true || false      // t || f returns true
o4=false || (3 == 4)  // f || f returns false
o5="Cat" || "Dog"     // t || t returns Cat
o6=false || "Cat"     // f || t returns Cat
o7="Cat" || false     // t || f returns Cat

РЕДАКТИРОВАТЬ: Что касается БОНУСА, кажется, что вы можете сделать нечто подобное с троичным в последних версиях PHP, выполнив:

expr1 ?: expr3

Из документации PHP:

Начиная с PHP 5.3, можно опустить среднюю часть троичного оператора. Выражение expr1?: Expr3 возвращает expr1 , если expr1 оценивается как TRUE и expr3 в противном случае.

Я не знаком с PHP, поэтому мне было бы интересно узнать результат.

1 голос
/ 15 ноября 2010

Я считаю, что это просто называется OR. Здесь есть много хороших примеров использования заданий: http://php.net/manual/en/language.operators.assignment.php

0 голосов
/ 15 ноября 2010

Есть ли название для этого вида конструкции?

Это логический оператор ИЛИ .

Бонус: ЕстьЕсть ли способ сделать это в Php без использования тернарного оператора?

Нет, с PHP вы можете сделать это только с помощью оператора тернея.

...