为什么我应该使用 isset?

3

我是PHP的初学者,想知道这两者之间有什么区别:

$variable = "text"; 
if($variable){
    echo $variable; 
}

并且这个

$variable = "text"; 
if(isset($variable)){
    echo $variable; 
}

isset() 最适合用于单选框和复选框。对于字符串/整数输入,请使用 empty()。当一个变量包含一个值时,使用 isset() 永远是真的。 - Funk Forty Niner
5
你自己设置了变量,所以这不是个问题。isset() 函数用于测试是否存在你认为可能会出现但不一定存在的变量,从而避免“未定义的变量”或“未定义的索引”的警告。例如,考虑 $_POST['foo']。只有在进行 POST 请求并定义了 foo 表单字段时才会存在它。不能直接开始使用它,因为它可能不存在,所以需要使用 isset() 测试确保它存在。 - Marc B
是的,但在这些给定的示例中,两者都可以正常工作,为什么我应该使用isset或empty? - Giorgi
1
仍然认为应该对单选框/复选框使用isset,而不是变量/输入。这正在成为一个主要基于观点的讨论/问题。 - Funk Forty Niner
1
$variable=false; 放入代码中并重试。在您的示例中,整个 if 语句都是无意义的,因此问题也是无意义的。 - Sami Kuhmonen
显示剩余4条评论
4个回答

2
有时候,出于安全或调试的原因,您想知道一个变量是否已设置。
函数isset()用于确定变量是否已设置且不为NULL,并相应地返回true或false。
而表达式if($variable){}将在$variable已设置但为零或$variable已设置但其当前值为false(=反例)时评估为false。
假设:
isset($variable):如果变量已设置且不为null,则评估为true
if($variable):根据变量的值或表达式的结果/值进行评估,可能为true

2

isset()empty()等函数最重要的特点是,当变量未设置时不会抛出错误,正如Marc B已经提到的那样。

PS:我强烈建议在开发过程中打开严格模式和所有错误报告。


1

isset 用于检查您收到的输入是否包含您期望的内容——这是一个非常宽泛的定义,我写这个试图轻松解释何时使用它。

当您自己设置变量时,使用 isset 就没有意义了,您知道它已经被设置并且包含某些值。

然而,许多语言(不仅仅是 PHP)处理用户输入。在这种情况下,用户可以是人类、另一个计算机服务等。通常将该输入存储在变量中。PHP 的一个很好的例子是 $_POST$_GET$_SERVER$_SESSION

当您收到用户通过 HTML 表单制作的输入时,您希望检查某些值是否已被填充,在这种情况下,您使用 isset

下面是一个 HTML 表单示例:

<form method="POST" action="your_file.php">
    <input type="text" name="first_name" />
    <input type="text" name="last_name" />
    <button type="submit">Send</button>
</form>

有人可以提交该表单,他们可以填写两个输入框。或者只填一个,甚至一个都不填。您不知道他们做了什么,但无论如何-PHP都会为您提供一个可能包含正确输入的变量。

如果我提交了空白表单,并且您尝试访问first_name的值-您将收到PHP警告-您不希望出现PHP警告。

因此,在使用用户输入(在本例中为$_POST超全局数组)之前,您应该检查我是否正确填写了所有内容,并且您可以通过以下方式实现:

if(isset($_POST['first_name']) && isset($_POST['last_name']))
{
    echo "Form was filled in correctly";
}
else
{
    echo "Form wasn't filled in correctly! Please fill in both fields";
}

希望这能稍微澄清一些。再说一遍,我使用了非常简单但真实的例子。

0

也许你的例子有点偏颇。但是,如果你忽略每个代码段的第一行,也许你会有不同的看法。考虑这些代码段。

if($variable){
    echo $variable; 
}

如果$variable未被初始化并赋值,则该is语句将导致错误。
另一方面,如果您对变量进行初始化。
$variable = "text";
if($variable){
     echo $variable; 
}

将测试变量是否为 true 或非零。

isset() 函数将忽略值,并告诉您变量是否已初始化。

在以下代码段中,if() 语句将返回 true。

$variable = "text"; 
if(isset($variable)){
    echo $variable; 
}

在这段代码中,while

<?php
if(isset($variable)){
    echo $variable; 
}

if()语句将返回false。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接