Более логичное выражение «если $ var определено, а $ var не равно» в php - PullRequest
0 голосов
/ 24 января 2012

В PHP у меня есть оператор if:

FIX_RECIPE_ID && FIX_RECIPE_ID != $favouriteRecipeId

Он делает то, что говорит на банке, но есть ли более логичный способ написания этого утверждения?

Спасибо всем заранее!

Ответы [ 2 ]

2 голосов
/ 24 января 2012

Извините, что отправляю как ответ, но у меня еще нет прав комментирования.

Ответ Шиплу не совсем правильный.Строка:

defined(FIX_RECIPE_ID) && (FIX_RECIPE_ID != $favouriteRecipeId)

будет работать, но выкинет уведомление по линии Use of undefined constant FIX_RECIPE_ID - assumed 'FIX_RECIPE_ID', если оно не определено, и будет иметь очень неожиданное поведение (обычно возвращает false), если это так.

Функция defined принимает имя константы в виде строки.PHP будет предполагать, что вы имеете в виду строку 'FIX_RECIPE_ID', если она не определена и работает должным образом (хотя, как уже упоминалось, выдает уведомление).Если оно определено, вы будете проверять, существует ли константа, названная в честь значения FIX_RECIPE_ID.

То есть, если она не определена, ваша проверка эффективна:

defined('FIX_RECIPE_ID') && (FIX_RECIPE_ID != $favouriteRecipeId)

Что правильно и вернет false.Однако, когда определено (давайте представим, что оно 10), проверка станет:

defined(10) && (FIX_RECIPE_ID != $favouriteRecipeId)

И определено вернет false. Все это условное выражение всегда будет возвращать false.

Правильный способ использования определен в этом контексте:

defined('FIX_RECIPE_ID') && (FIX_RECIPE_ID != $favouriteRecipeId)
2 голосов
/ 24 января 2012

Если FIX_RECIPE_ID является константой, используйте этот синтаксис.

defined(FIX_RECIPE_ID) && (FIX_RECIPE_ID != $favouriteRecipeId)

Если нет, сначала сделайте его переменной, затем используйте

isset($FIX_RECIPE_ID) && ($FIX_RECIPE_ID != $favouriteRecipeId)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...