Blogger Information
Blog 9
fans 1
comment 0
visits 7661
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
is_null,empty(),isset()三个函数细分 以及变量的作用域 --2018年4月16日 15点10分
hongda的博客
Original
779 people have browsed it

一.分享下自己对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);
?>


运行实例 »
点击 "运行实例" 按钮查看在线实例

运行结果如下:

QQ截图20180413150937.jpg

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() 
 */
?>

运行实例 »

点击 "运行实例" 按钮查看在线实例



运行结果如下:

QQ截图20180413150937.jpg

可见未定义的变量和值为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));


?>

运行实例 »

点击 "运行实例" 按钮查看在线实例

运行结果如下:

QQ截图20180413160832.jpg


对着三个函数的总结如下:

实例

<?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进行初始化


?>

运行实例 »

点击 "运行实例" 按钮查看在线实例

输出结果如下:

QQ截图20180413160832.jpg

所以自我总结如下:

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文件中  都是会自动创建的  不用用户手动去创建

运行实例 »

点击 "运行实例" 按钮查看在线实例


运行结果如下:

QQ截图20180413160832.jpg

总结:

全局作用域 在函数外面声明赋值

可以在函数内用 global 关键字把变量引用进函数里面

也可以用 $GLOBALS['siteName'] 直接用变量

静态变量: 变量数据会被保存  当函数结束的时候   它的值会保存为上次函数执行

之后的值

超全局变量:$_SERVER  ,$_GET , $_POST, $_COOKIE, $_SESSION , $_REQUEST

超全局变量是系统预定义的  在用户创建的每一个php文件中  都是会自动创建的  不用用户手动去创建


手写作业:

微信图片_20180416150634.jpg

微信图片_20180416150649.jpg

微信图片_20180416150720.jpg


微信图片_20180416150725.jpg


微信图片_20180416150738.jpg

微信图片_20180416150742.jpg

微信图片_20180416150745.jpg





Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!