我提供了代码,其中第一个参数是图像路径或MySQL数据库中的默认NULL,
function formatImage($img = NULL, $alt = NULL)
{
// if(isset($img)) DOESN'T WORK
if(!$img == NULL)
{
return '<img src="' . $img . '" alt="' . $alt .'" />';
}
else
{
return NULL;
}
}
为什么isset不起作用?相反,我必须检查是否(!$ img == NULL)。
如果使用isset检查参数,并且$ img在数据库中为NULL。作为输出我得到整个HTML IMG标记与空src attibutes,和alt属性是从数据库获取的actaully标题。 将display属性设置为none,不能接受没有src属性的图像。
答案 0 :(得分:2)
试试这个:
if($img != NULL) {
return '<img src="' . $img . '" alt="' . $alt .'" />';
}
<强>解释强>
如果你将!$img
与NULL
进行比较,你基本上会在$img
上做一个布尔反转,然后看看它是否与NULL相比 - 这不是你想要的。
另外,请注意您应该使用
if($img !== NULL)
代替。 !=
将比较提供的变量的值,而!==
将比较值和数据类型(在NULL情况下可能是您的最佳利益)。
答案 1 :(得分:0)
用var_dump检查变量后,从数据库返回的数据实际上是空字符串,
string(0) "" and not `NULL` datatype and value literally.
这就是isset()
在两种情况下都保持返回TRUE的原因。使用值检查工作正常,因为返回的值是空字符串而不是NULL数据对象,我的意思是类型。
从php.net获取ISSET语言构造的返回值:
如果var存在并且其值不是NULL,则返回TRUE,否则返回FALSE。
如果!==
为真,则检查返回的变量值和数据类型是否为NULL,因为数据类型为非NULL,因为值为IS NULL。
似乎问题实际上是我在数据库字段中预期NULL表现为NULL数据类型。
如果我错了,请纠正我。
+1 @SquareCat