博客列表 >is_null,empty(),isset()三个函数细分 以及变量的作用域 --2018年4月16日 15点10分

is_null,empty(),isset()三个函数细分 以及变量的作用域 --2018年4月16日 15点10分

hongda的博客
hongda的博客原创
2018年04月13日 13:06:15778浏览

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





声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议