似乎我的代码可以检查null,如果我这样做
if ($tx)
要么
if (isset($tx))
为什么我会写第二个更难写?
if ($tx)
对于以下任何条件,此代码将评估为false :
unset($tx); // not set, will also produce E_WARNING $tx = null; $tx = 0; $tx = '0'; $tx = false; $tx = array();
以下代码仅在以下条件下评估为false:
if (isset($tx)) // False under following conditions: unset($tx); // not set, no warning produced $tx = null;
对于某些人来说,打字非常重要.但是,PHP的设计非常灵活,可变类型.这就是创建变量处理函数的原因.
isset()与TYPE或VALUE无关 - 仅与EXISTENCE有关.
if($ condition)...将VALIA OF VARIABLE评估为布尔值.
if(isset($ condition))...将可变值的存在性评估为布尔值.
由于两个原因,isset()可能是false.
首先,因为没有设置变量,所以没有值.
其次,因为变量是NULL,这意味着"未知值"并且不能被认为是因为它包含"无值"并且因为很多人使用$ v = null来表示与未设置($ v)相同的事物.
(请记住,如果您特别想要检查null,请使用is_null().)
isset()通常用于检查可能存在或不存在的外部变量.
例如,如果您有一个名为page.php的页面,则具有以下内容:
ini_set('display_errors', 1); error_reporting(E_ALL); if ( $_GET["val"] ) { // Do Something } else { // Do Nothing }
它适用于任何这些URL:
http://www.example.com/page.php?val=true // Something will be done. http://www.example.com/page.php?val=monkey // Something will be done. http://www.example.com/page.php?val=false // Nothing will be done. http://www.example.com/page.php?val=0// Nothing will be done.
但是,您将收到此URL的错误:
http://www.example.com/page.php
因为URL中没有'val'参数,所以$ _GET数组中没有'val'索引.
正确的方法是:
if ( isset($_GET["val"]) ) { if ( $_GET["val"] ) { // Do Something } else { // Do Nothing } } else { // $_GET["value"] variable doesn't exist. It is neither true, nor false, nor null (unknown value), but would cause an error if evaluated as boolean. }
虽然有这方面的捷径.
您可以使用empty()检查存在和某些布尔条件的组合,
if ( !empty($_GET["val"]) ) { // Do someting if the val is both set and not empty // See http://php.net/empty for details on what is considered empty // Note that null is considered empty. }
要么
if ( isset($_GET["val"]) and $_GET["val"] ) { // Do something if $_GET is set and evaluates to true. // See php.net logical operators page for precedence details, // but the second conditional will never be checked (and therefor // cause no error) if the isset returns false. }
我想指出,我在这里读到的每个人的反应应该有一个警告:
"如果测试已设置为NULL的变量"(php.net/isset),"isset()将返回FALSE".
这意味着在某些情况下,比如检查GET或POST参数,使用isset()就足以判断变量是否已设置(因为它将是一个字符串,或者它不会被设置).但是,如果NULL是变量的可能值,这在进入对象和更复杂的应用程序时相当常见,则isset()会让您高度干燥.
例如(使用带有Suhosin-Patch 0.9.6.2(cli)的PHP 5.2.6测试(内置:2008年8月17日09:05:31)):
输出:
bool(true) bool(false) bool(false)谢谢,PHP!