php的empty,isset,is_null与!

来说说php的empty,isset,is_null 与!,这几个都是if语句中比较常见的判断逻辑。但是有时候用的很纠结,甚至看别人写的程序里面也很纠结。特地梳理梳理,避免踩坑

先来定义一些东西

<?php
$a;
$b=0;
$c=array();
$d='';
$e=null;

empty,用了会上瘾

这是一个用了会上瘾的语言结构!

多好,empty可接受的参数是一个变量,任意类型,哪怕是变量不存在,只要变量被boolean转换之后是false(参考:php的boolean都有哪些),那么empty返回的就是false,并且不会出现警告!等价于 !isset($var) || $var == false

不过注意的是,empty里面不能使用表达式(在php<=5.4),也就是说 empty(trim($name))这个会导致解析错误,不过在php>=5.5这个是有效的!

执行下面代码

var_dump( empty($a) );
var_dump( empty($b) );
var_dump( empty($c) );
var_dump( empty($d) );
var_dump( empty($e) );

结果

bool(true)
bool(true)
bool(true)
bool(true)
bool(true)

isset,只需要确定变量是不是存在

通常,为了避免警告产生,一般用到isset,通常在不关心其值的时候用,但是这里有一个坑,请看下面代码

var_dump( isset($a) );
var_dump( isset($b) );
var_dump( isset($c) );
var_dump( isset($d) );
var_dump( isset($e) );
bool(false)
bool(true)
bool(true)
bool(true)
bool(false)

看到没,看到没!null居然也被isset判断为false,这个,我思维一下子转不过来了……我还是少用为妙,我set这个为null,它反而说我没有set它,太放肆了!

is_null,感觉更坑

这个就是用来判断null值的,变量为null,返回true,看代码

var_dump( is_null($a) );
var_dump( is_null($b) );
var_dump( is_null($c) );
var_dump( is_null($d) );
var_dump( is_null($e) );

结果

 

Notice: Undefined variable: a in C:\Users\huchao\Desktop\test.php on line 21
bool(true)
bool(false)
bool(false)
bool(false)
bool(true)

哎,泪流满面啊,变量没有设定是null,但也会警告,null也是null,其他的都不是null,算了,这个好像还是不用比较好。

 

!,通常我们确定该值存在

!当且仅当确定值存在的时候采用,不然那一堆的警告,作为一个轻度强迫症是不会原谅自己的。不过当我看到很多代码中对那些未定义的变量使用!的时候,我也是醉了…

最后,我还是习惯了使用empty……原来我都是用isset组合==的,哎…

附录

关于使用empty,其中会隐藏一些问题。

未完…

你可能还喜欢下面这些文章

Shell中的条件判断语句if的用法

shell中的if语法是最让我头疼的语法之一,它的判断就向使用USB插头一样——拿起来插入不行,翻转再插入还不行,再翻转插入行了!为了搞清楚这部分语言,我收集了一些文章关于if条件判断的用法,希望对你也有些帮助。一、基本语法语法说明bash shell会按顺序执行if语句,如果command执行后且它的返回状态是0,则会执行符合该条件执行的语句,否则后面的命令不执行,跳到下一条命令。当有多个嵌套时,只有第一个返回0退出状态的命令会导致符合该条件执行的语句部分被执行,如果所有的语句的执行状态都不为0,则执行else中语句。返回状态:最后一个命令的退出状态,或者当没有条件是真的话为0。注意:1、表

bash教程:一、变量,函数,控制流程

变量的定义和使用变量的定义bash变量定义很简单。如下:a=”hello”左边是变量名,右边是变量值。bash是弱类型,因此不需要给a加上类型。注意,等号两边不能有空格 比如 a = “hello”,这是错误的。变量使用变量使用需要在定义的变量名之前加上$,比如我们打印之前定义的aecho $a特殊变量后面再说,现在仅仅是最基础的,能够让自己写出一个完整的脚本就行。流程控制流程控制则是编写程序必备的过程,比如顺序,循环,条件,分支等等。在其他类C语言中有if…else,for,while,do…while,switch,那么在bash里面,这些应该怎么写呢。if…else结构a=0

C++ 判断 char* 是否相等

在C++中, 是一个指向字符的指针,通常用于表示C风格的字符串。判断两个  指针是否相等,需考虑两个方面:判断指针本身的地址是否相等:可以通过直接使用  或  操作符来实现。 和  指向不同的地址(尽管它们的内容相同),而  和  指向相同的地址。2. 判断指针指向的字符串内容是否相等:需要使用  函数,它是C标准库中的一部分,在C++中可用。 函数用于比较 、 和  的内容。如果内容相同, 返回

记录一下使用中PDO出现的一个问题:Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll().

在使用PDO的时候,一条sql语句打死都不执行,dump一下errorInfo试试,出现这样的错误信息问题描述居然告诉我还有语句没有执行完成?当前的查询未能执行,逗我么!考虑使用fetchAll,或者开启缓冲查询,行,你说得对….问题出现的使用场景服务器服务器为linux,安装了一个什么面板套件之类的,不是自家机器,也懒得去折腾,在本地的windows环境并没有该问题。程序笔者在对数据库的一个计数字段进行更新的时候,首先会先查询这个记录是否存在,如果存在则进行更新,如果不存在则先插入。问题就出现在记录不存在的时候,当我查询这条不存在的记录时候,发现这个记录不存在,然后进行插入,发现之前的查

CGI与FastCGI是什么

当我们在谈到cgi的时候,我们在讨论什么最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html。事物总是不 断发展,网站也越来越复杂,所以出现动态技术。但是服务器并不能直接运行 php,asp这样的文件,自己不能做,外包给别人吧,但是要与第三做个约定,我给你什么,然后你给我什么,就是握把请求参数发送给你,然后我接收你的处 理结果给客户端。那这个约定就是 common gateway interface,简称cgi。这个协议可以用vb,c,php,python 来实现。cgi只是接口协议,根本不是什么语言。下面图可以看到流程WEB服

赞赏

微信赞赏支付宝赞赏

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注