Как логические выражения должны быть написаны на PHP? - PullRequest
7 голосов
/ 18 августа 2010

Как в PHP должно быть написано следующее логическое выражение:

$foo = "";
if($var==TRUE){
    $foo = "bar";
}

или

if($var==TRUE){
    $foo = "bar";
}else{
    $foo = "";
}

или

$foo = ($var==TRUE) ? "bar": "";

Ответы [ 6 ]

8 голосов
/ 18 августа 2010

Прежде всего, true не является константой, это токен, поэтому, пожалуйста, не пишите его прописными буквами (я знаю, что некоторые стандарты делают это, но я думаю, что это путает смысл) ...

Во-вторых, вам не нужно избыточное $var == true сравнение внутри if. Это точно так же, как if ($var) { (для двойного == сравнения. Идентичное сравнение === должно быть явным).

В-третьих, я предпочитаю предварительную инициализацию. Итак:

$foo = '';
if ($var) {
    $foo = 'one status';
} else {
    $foo = 'another status';
}

Если вам не нужна ветка else, просто удалите ее. Я предпочитаю предварительную инициализацию, так как она заставляет вас инициализировать переменную и предотвращает случаи, когда вы забудете инициализировать ее в одной из ветвей. Плюс, он дает вам подсказку типа, когда вы вернетесь, чтобы прочитать функцию позже ...

И для такой простой ветки использование троичного синтаксиса вполне нормально. Если есть более сложная логика, я бы держался подальше:

$foo = $var ? 'bar' : '';
5 голосов
/ 18 августа 2010

Все эти работы. Это предпочтение. Я хотел бы сначала инициализировать переменную, как вы делали в первом примере. Но для чего-то такого простого, 3-й вариант хорош в моей книге.

Кроме того, третий не должен быть настолько многословным, если $ var - просто логическое значение:

$foo = $var ? "bar" : "";
1 голос
/ 18 августа 2010

Я предпочитаю первый (за исключением избыточного теста для логического значения), потому что он работает согласованно в разных языках, особенно в тех, которые требуют объявления переменной (и, возможно, ее типизации) перед ее установкой.
Java:

String foo = "";
if (var) {
  foo = "Something";
}

JavaScript или JavaFX:

var foo = "";
if (var) {
  foo = "Something";
}

1008 * Etc. * Можно также использовать 3-ю форму, но если условие (или назначение) является сложным, оно немного менее читабельно.

1 голос
/ 18 августа 2010

Мне нравится первый:

$foo = "";
if($var==TRUE){
    $foo = "bar";
}

Поскольку он понятен, лаконичен и легко читается.

0 голосов
/ 18 августа 2010

Правильный ответ, как это часто бывает, «это зависит».В этом случае

if ($var==TRUE) $foo = "bar";
else $foo = "";

очень ясно.Но каков ваш контекст?

В общем, третичный оператор, ваш третий вариант, должен использоваться с особой осторожностью, поскольку его очень легко становится трудно читать.

Но подумайте с точки зрениячто вы хотите, чтобы ваш код имел в виду, больше, чем о том, что он делает.Вы хотите установить для $ foo «нормальное» значение, а затем переопределить его?Или вы хотите установить что-то, что зависит от того, что такое $ var?

Что-то, что я считаю полезным изменить, это не то, что вы спрашиваете напрямую, но это похоже на это, с

function func() {
    ...
    if ($condition) {
        do plenty
        of things
    }
    else {
        do plenty
        of things
    }
}

То, что я обычно хотел бы изменить на:

function func() {
    ...
    if ($condition) {
        do plenty
        of things
        return;
    }
    do plenty
    of things
}

Это обычно имеет смысл .

Просто спросите себя: «Если кто-то, кто не сделал»ничего не знаю о моем коде, прочитайте его, имеет ли это смысл для него? Или для нее? "

0 голосов
/ 18 августа 2010

Не имеет большого значения.Мне нравится первый, когда есть много elseif, чтобы вы знали, что переменная всегда инициализируется.Но на самом деле это просто вопрос предпочтений.

Как и цитаты, мне нравится использовать одиночные в php.Нет веских причин:)

...