【问题标题】:How can I use PHP's isset() in addition to empty()?除了empty()之外,我如何使用PHP的isset()?
【发布时间】:2009-08-14 02:28:31
【问题描述】:

如何在下面的代码中添加 isset() 并保留 empty()?

$pagesize = (!empty($_GET['pagesize'])) ? $_GET['pagesize'] : 20;

更新:

我只是想确保 php 不会产生任何通知或警告

【问题讨论】:

标签: php isset


【解决方案1】:

这是你的意思吗?

$pagesize = (isset($_GET['pagesize']) && !empty($_GET['pagesize'])) ? 
                $_GET['pagesize'] :
                20;

http://us.php.net/manual/en/language.operators.logical.php

编辑:
完整地说,empty 已经检查是否设置了某些内容,因此您也不需要使用 isset()。
如果它直接进入查询或类似的东西,我也会警告不要使用此代码。考虑使用intvalis_numeric 和类似函数。

【讨论】:

  • 这是相当多余的,因为empty 会检查是否设置了值
  • 我知道,但我正在用给定的信息回答这个问题。这样的事情无论如何都是危险的,因为它可以被设置并且不为空但仍然包含恶意代码或意外数据。我将更新我的答案以包含此内容。
  • @nickf 这不是真的。有时 isset 和 empty 可以而且应该一起使用。确实,如果未设置变量,则 empty 返回 true,但不是每个 isset 的变量都是空的。使用 isset 和 !empty 是确定变量已设置并包含可用值的好方法。
  • @Nilpo 我认为你搞错了。 ! empty($var) and isset($var) 是多余的,因为$var 没有可能的值(或缺少值)会导致! empty($var) 返回true,同时导致isset($var) 返回false(如果! empty($var) 是@987654335 @,然后条件短路,isset($var) 不被评估)。两者不会多余的唯一方法是如果您想检查 empty($var) and isset($var) 是否与 empty($var) and ! is_null($var) 相同(但 IMnsHO 更令人困惑)。
  • @Nilpo 是对的,下面的文章很好地描述了细微的差异。 techtalk.virendrachandak.com/php-isset-vs-empty-vs-is_null
【解决方案2】:

我不确定你到底想要什么。 isset 将检查是否已设置值,如果已设置则返回 true。 empty 将检查一个值是否还没有 被设置或者它是否等于假(例如:0, "", null),如果是则返回真。

我不明白您为什么需要将两者结合起来。要重写您的示例 empty,您可以这样做:

$pagesize = isset($_GET['pagesize']) && $_GET['pagesize']
          ? $_GET['pagesize']
          : 20;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-29
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    相关资源
    最近更新 更多