PHP -我还需要检查IF ISSET..或者IF ($_GET)是否足够好


PHP - Do I still need to check IF ISSET?.... or is IF ($_GET) good enough?

我正在使用相当多的($_GET)语句,想知道是否有必要先检查if (isset($_GET)) ?

我读过不少文章,建议首先检查IF ISSET(我被教的编程方式)是很重要的,但它们都是2009年左右的。现在我们的程序员编写代码时没有检查ISSET,并说检查ISSET是不必要的,只会增加脚本的加载。

有人能解释一下吗?

代码的一个例子是:

if ($_GET["option"])  { 
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://mycurlurl.com/blah);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
....

或者另一个例子是

if($_GET['type']=='reports') header('location: http://myurl.com/reports');

我想知道它是否应该都使用ISSET,看起来像

if (isset($_GET["type"]) && ($_GET["type"] == "reports")) { header('location: http://myurl.com/reports'); }

任何想法都将非常感激。当我测试网站或查看日志时,他的代码没有给出错误,但我不确定是否会有我们无法看到的致命错误。

如果你不包括一个isset() $_GET,你会得到一个Undefined Index PHP错误,所以这是一个好主意,检查$_GET的存在之前使用它的任何地方,即使在一个If条件。我强烈建议您将其作为一种良好的编程实践。因此,您的代码部分与isset检查是一个很好的做法

if (isset($_GET["type"]) && ($_GET["type"] == "reports")) { 
    header('location: http://myurl.com/reports'); 
}

我见过很多不使用isset()检查的代码,但我倾向于在编写代码时使用它,因为1.)安全总比抱歉好,2.)如果你在php上启用了错误报告,如果你试图获取$_GET['something'],它会抛出一个索引不存在的警告。

在你尝试呼叫/获取数据之前,确保数据在那里是一个很好的做法。国际海事组织。

在PHP中,使用未设置的变量或数组元素不会出错。默认情况下,你只会得到一个空值。

如果您启用了错误报告,它将发出关于使用未定义变量或索引的警告,但代码通常仍将按预期工作。最好先检查这一点,这样可以减少PHP日志中的混乱。可能在某些情况下,您需要测试以获得正确的程序逻辑,但如果您正在测试变量是否设置为某些特定值,如在您的问题中的示例中,则不应该有问题。

如果我们看一下php手册中$_GET的解释,它说" 通过URL参数传递给当前脚本的变量的关联数组" 。"关联数组"这个词清楚地告诉我们这个错误是什么。如果访问任何未设置的数组变量,它将抛出一个警告,指出索引未定义。这个论证在我们的例子中有效吗?让我们来测试一下。让我们重写代码,检查表单变量是否设置,然后尝试访问该变量:

if (isset($_GET['type']))
{
$var1 = $_GET['type'];
if($var1=="reports")
  header('location: http://myurl.com/reports');
}

使用isset()或empty()的原因是检查变量是否存在并且是否有值。

如果$_GET['type']根本没有定义,它将抛出一个PHP通知。

isset()和empty()都禁止此操作。

同样,如果($_GET['type']){}单独检查是错误的,除非您期望得到一个布尔值。

如果$_GET['type']为空字符串,false或0,则不处理If。

isset() will accept empty string, false and 0.
empty() will accept all of those.

所以你真的应该看看!empty(),因为它会验证变量是否包含某种值。

!empty() will not accept empty string, false, 0 or null.
!isset() will only accept null.