更合乎逻辑的“;如果$var被定义并且$var不等于“0”;php中的语句


More logical "if $var is defined and $var does not equal" statement in php

在PHP中,我有if语句:

FIX_RECIPE_ID && FIX_RECIPE_ID != $favouriteRecipeId

不过,它照罐头上说的做,有没有更合乎逻辑的方式来写这句话?

提前感谢大家!

如果FIX_RECIPE_ID是常量,请使用此语法。

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

如果不是,请先将其设为变量,然后使用

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

很抱歉作为回答提交,但我想我还没有评论权限。

希普鲁的回答并不完全正确。线路:

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

看起来会起作用,但如果没有定义,则会发出类似Use of undefined constant FIX_RECIPE_ID - assumed 'FIX_RECIPE_ID'的通知,如果定义了,则会出现非常意外的行为(通常返回false)。

defined函数将常量的名称作为字符串。如果没有定义字符串'FIX_RECIPE_ID',PHP将假设它是指它,并且它按预期工作(尽管如前所述,抛出了一个通知)。如果定义了它,您将检查是否存在以FIX_RECIPE_ID的命名的常量。

这意味着当它没有定义时,你的检查是有效的:

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

这是正确的,将返回false。然而,当被定义为时(假设它是10),检查将变为:

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

并且defined将返回false整个条件将始终返回false

在此上下文中定义的正确使用方式是:

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