我有时会对使用其中的哪一个感到困惑,
说我有一个名为getmember($id)
function getmember($id)
{
// now this is the confusing part
// how do i test if a $id was set or not set?
//solution 1
if(empty($id))
{
return false;
}
// solution 2
if(isset($id))
{
return false;
}
}
有时我不清楚,有时如果函数中的参数设置为function($var="")
然后我做
if($var ==="")
{
return false;
}
下次isset ? empty ? or ===''
时我应该使用什么?
答案 0 :(得分:10)
在这里,您可以完整地分析哪些有效,何时有效:
<?
echo "<pre>";
$nullVariable = null;
echo 'is_null($nullVariable) = ' . (is_null($nullVariable) ? 'TRUE' : 'FALSE') . "\n";
echo 'empty($nullVariable) = ' . (empty($nullVariable) ? 'TRUE' : 'FALSE') . "\n";
echo 'isset($nullVariable) = ' . (isset($nullVariable) ? 'TRUE' : 'FALSE') . "\n";
echo '(bool)$nullVariable = ' . ($nullVariable ? 'TRUE' : 'FALSE') . "\n\n";
$emptyString = '';
echo 'is_null($emptyString) = ' . (is_null($emptyString) ? 'TRUE' : 'FALSE') . "\n";
echo 'empty($emptyString) = ' . (empty($emptyString) ? 'TRUE' : 'FALSE') . "\n";
echo 'isset($emptyString) = ' . (isset($emptyString) ? 'TRUE' : 'FALSE') . "\n";
echo '(bool)$emptyString = ' . ($emptyString ? 'TRUE' : 'FALSE') . "\n\n";
//note that the only one that won't throw an error is isset()
echo 'is_null($nonexistantVariable) = ' . (@is_null($nonexistantVariable) ? 'TRUE' : 'FALSE') . "\n";
echo 'empty($nonexistantVariable) = ' . (@empty($nonexistantVariable) ? 'TRUE' : 'FALSE') . "\n";
echo 'isset($nonexistantVariable) = ' . (isset($nonexistantVariable) ? 'TRUE' : 'FALSE') . "\n";
echo '(bool)$nonexistantVariable = ' . (@$nonexistantVariable ? 'TRUE' : 'FALSE') . "\n\n";
?>
输出:
is_null($nullVariable) = TRUE
empty($nullVariable) = TRUE
isset($nullVariable) = FALSE
(bool)$nullVariable = FALSE
is_null($emptyString) = FALSE
empty($emptyString) = TRUE
isset($emptyString) = TRUE
(bool)$emptyString = FALSE
is_null($nonexistantVariable) = TRUE
empty($nonexistantVariable) = TRUE
isset($nonexistantVariable) = FALSE
(bool)$nonexistantVariable = FALSE
当我在上面显示(bool)$variable
时,就是如何在条件中使用它。例如,要检查变量是空还是空,您可以执行以下操作:
if (!$variable)
echo "variable is either null or empty!";
但最好使用一个函数,因为它更具可读性。但这是你的选择。
另外,请检查the PHP type comparison table。这基本上就是我上面所做的,除了更多。
答案 1 :(得分:3)
如果您只想知道是否定义了变量,请使用isset()
如果您想查看它是否已初始化,请使用is_null()
如果您想将其值与其他值进行比较,请使用==
答案 2 :(得分:1)
不一样:
isset:确定变量是否已设置且不为NULL http://ch.php.net/manual/en/function.isset.php
empty:确定变量是否为空 http://ch.php.net/manual/en/function.empty.php
$ a === $ b:如果$ a等于$ b,则为TRUE,它们属于同一类型。 http://ch.php.net/manual/en/language.operators.comparison.php