在几乎所有使用PHP开发的程序中,变量都是核心组成部分。大多数情况下,变量都有初始值,但有些变量可能未初始化,这可能导致PHP抛出“未定义变量”的警告。
变量未定义的原因可能多种多样:例如变量根本未声明、存在拼写错误,或者变量是条件性定义的。此外,变量的值可能为NULL,这可能表示尚未初始化或者函数返回了空值表示某种状态。
在使用变量前检查它们是否已定义或是否为空至关重要。PHP提供了isset()、empty()和is_null()三个函数来处理这些情况。
我们先来理解这三个函数的基本用途:
isset():检查变量是否已声明且不为NULL。
empty():判断变量是否存在且值不为false(包括0、空字符串、NULL等情况)。
is_null():检查变量的值是否为NULL。
isset()在变量已定义且不为NULL时返回true,即使变量值为0、空字符串或false也会返回true。而empty()在变量值为“假值”时返回true,包括0、空字符串""、字符串"0"、空数组、NULL或false。
两者相似之处在于它们都是语言结构,不能通过变量函数调用。
<?php $fruit = ''; if(isset($fruit)) { echo 'Do you like '.$fruit.'?'; } // Output: Do you like ? if(!empty($fruit)) { echo 'Do you like '.$fruit.'?'; } // No Output ?>
实际上,empty()可以用isset()结合逻辑操作实现,但通常直接使用内置empty()函数更为简洁:
<?php function my_empty($x) { return !isset($x) || $x == false; } ?>
当变量显式设置为NULL时,is_null()返回true,否则返回false。而isset()只要变量已定义且不为NULL就返回true。
<?php $fruit = NULL; if(isset($fruit)) { echo 'Do you like '.$fruit.'?'; } // No Output if(is_null($fruit)) { echo 'There is no fruit.'; } // Output: There is no fruit. ?>
empty()在变量值为“假值”时返回true,包括空字符串、NULL、整数0或空数组,而is_null()仅在变量值为NULL时返回true。
<?php $person = [ 'first_name' => 'Monty', 'last_name' => '', 'age' => '83', 'fav_movie' => NULL ]; if(empty($person['last_name'])) { if(is_null($person['last_name'])) { echo 'The last name is set to NULL.'; } else { echo 'The last name is probably an empty string.'; } } // Output: The last name is probably an empty string. if(is_null($person['fav_movie'])) { echo $person['first_name'].' did not specify a favorite movie.'; } // Output: Monty did not specify a favorite movie. ?>
为了编写更简洁且安全的代码,可以参考以下技巧:
一次可以向isset()传递多个变量,以检查它们是否都已定义且不为NULL。
避免使用 == 来检查NULL,以免将空字符串或false误判为NULL。
本文详细解析了PHP中isset()、empty()和is_null()的用法及区别。理解它们的差异可以帮助开发者更精准地处理变量状态,提高代码的稳定性和可读性。