一.分享下自己对is_null(), empty() 和 isset() 这三个函数的理解:
1.首先是 is_null() 函数,php.net 对它的描述是 “finds whether a variable is null”。
所以当变量未声明 或者 变量已声明但是没赋值 或者 变量 已声明且赋值为null时 函数会返回 TRUE.
以下我用实例测试下:
实例 <?php echo '<h3>is_null(),empty(),isset()</h3>'; //特别提示:这三个函数仅适用于变量判断,不要直接到用字面量上面 echo '<hr>'; /医院 * 一、is_null()什么时候返回true? * 1.变量已声明但未初始化,默认为null值 * 2.变量显示赋值为null * 3.unset()销毁后,变量为null值 * 总结:变量不存在/没赋值/值为null,则返回true */ $var1; //已申明 但未初始化 $var2 = null; //已申明 初始化为null $var3 = 'php';//已申明 初始化为非null值 $var4 = 'hi'; unset($var4); //把第四个变量删除了 $var6 = ""; @var_dump(is_null($var1)? true : false); var_dump(is_null($var2)? true : false); var_dump(is_null($var3)? true : false); @var_dump(is_null($var4)? true : false); @var_dump(is_null($var5)? true : false); var_dump(is_null($var6)? true : false); ?> 运行实例 » 点击 "运行实例" 按钮查看在线实例
运行结果如下:
2.empty()函数,php.net里面对它的描述是:“Determine whether a variable is considered to be empty. A variable is considered empty if it does not exist or if its value equals FALSE. empty() does not generate a warning if the variable does not exist.” 就是判断一个变量是否为空,当一个变量不存在或者它的值为false的时候这个变量都会被认为是空。
以下用实例测试下:
<?php /* * 2.empty() * 什么情况会被认为是empty() php.net文档说明: * "" (an empty string) * 0 (0 as an integer) * 0.0 (0 as a float) * "0" (0 as a string) * NULL * FALSE * array() (an empty array) * 空不一定是null 但是null一定是空 */ $str1 = ''; $str2 = []; $str3 = '0'; $str4 = 0; $str5 = null; $str6 = false; $str7 = 120; echo '<hr>'; var_dump(empty($str1)? true : false); var_dump(empty($str2)? true : false); var_dump(empty($str3)? true : false); var_dump(empty($str4)? true : false); var_dump(empty($str5)? true : false); var_dump(empty($str6)? true : false); var_dump(empty($str7)? true : false); var_dump(empty($str100)? true : false); /* * 判断用户是佛在文本框输入了内容: is__null还是 empty() * 用 empty() */ ?>
点击 "运行实例" 按钮查看在线实例
运行结果如下:
可见未定义的变量和值为null的变量 都会被认为是空值。
3.isset()函数,php.net对它的描述为“Determine if a variable is set and is not NULL.”判断一个函数,如果它已经被设定且值不为NULL。
以下用实例测试下:
实例
<?php echo '<hr>'; /* * isset() 是null的相反操作 * 总结:变量存在且不为null,返回true */ $domain = 'www.w3schools.com'; $name = null; $job; $var10 = '0'; var_dump(isset($domain)); var_dump(isset($var10)); var_dump(isset($job)); var_dump(isset($name)); ?>
点击 "运行实例" 按钮查看在线实例
运行结果如下:
对着三个函数的总结如下:
<?php /* * 总结: * 1.变量有两种状态 : 已申明和未申明 * 2.对于已申明的变量有两种状态:已赋值 未赋值 * 3.变量可能被赋值的有三种 : null, 空 , 非空值 * 3.1 null is_null * 3.2 空 empty() * 3.3 空或非空 isset() * * 基本原则: * 1.对于未申明只能用isset()进行判断 * 2.对于已申明, 为空用empty()判断 , 是否初始化了用is_null() * */ echo '<hr>'; //第一种场景:变量未声明 //$a未声明 var_dump(isset($a)? true : false); //没警告 //实例:分页显示数据 如果当前url地址中有分页变量p, //输出指定页 如果没有 默认为第一页 echo '<hr>'; $page = isset($_GET['p'])? $_GET['p'] : 1 ; echo $page; @var_dump(is_null($a)? true : false ); var_dump(empty($a)? true : false ); //第二种场景:变量已赋值 $a = 'www.w3schools.com'; $b = ''; $c = null; echo '<hr>'; var_dump(isset($a));//有无 var_dump(empty($b));//非空 @var_dump(is_null($c));//null //如果不确定变量最终是什么类型的时候 建议用null进行初始化 ?>
点击 "运行实例" 按钮查看在线实例
输出结果如下:
所以自我总结如下:
isset()在变量已经声明且不为null的情况下才会 return true。
empty()在以下几种情况会return true:
"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
is_null()在变量的值为null 或者 没设定 或者 变量不存在的时候 会 return true。
二. 变量的作用域:
<?php /医院 * Created by PhpStorm. * User: hongda * Date: 12/04/2018 * Time: 11:37 PM */ /* * 作用域只有三个 * 1.全局:函数之外创建的 * 2.局部:函数内创建的 * 3.静态:函数内创建的,仅在函数中使用 */ $siteName = 'www.w3schools.com'; //全局 //全局变量数组 //$GLOBALS['siteName']; function hello(){ //函数内部无法访问全局变量 // global $siteName; $userName = 'hongda'; // return $userName.'is visiting '.$siteName; return $userName.'is visiting '.$GLOBALS['siteName']; } echo hello(); echo '<br>'; //静态变量 function myStatic(){ static $num = 1; return $num.'th'.$num++.'<br>'; } echo myStatic(); echo myStatic(); echo myStatic(); echo myStatic(); echo myStatic(); /* * 超级全局变量:$_SERVER ,$_GET , $_POST, $_COOKIE, $_SESSION , $_REQUEST * $_REQUEST = ,$_GET + $_POST + $_COOKIE */ echo '<hr>'; //可以在全局直接引用超全局变量 echo 'my name is : '.$_GET['name']; echo '<hr>'; function outputName(){ return 'my name is : '.$_GET['name']; } echo outputName(); //超全局变量是系统预定义的 在用户创建的每一个 //php文件中 都是会自动创建的 不用用户手动去创建
点击 "运行实例" 按钮查看在线实例
运行结果如下:
总结:
全局作用域 在函数外面声明赋值
可以在函数内用 global 关键字把变量引用进函数里面
也可以用 $GLOBALS['siteName'] 直接用变量
静态变量: 变量数据会被保存 当函数结束的时候 它的值会保存为上次函数执行
之后的值
超全局变量:$_SERVER ,$_GET , $_POST, $_COOKIE, $_SESSION , $_REQUEST
超全局变量是系统预定义的 在用户创建的每一个php文件中 都是会自动创建的 不用用户手动去创建
手写作业: