PHP中判断空的方法,php中类型判断和NULL,空值检查的方法

在一些接口和数据库的设计中。数据库的非必填字段可能为null或者为空。这个时候接口前端javascript去判断的时候就会比较麻烦。为了便于统一的判断。一律把null和 空装换成 ''空.这样前端的判断就变得简洁 if(aa == ''){........}

建议使用 == 或者 === 来判断。。以下是我简短的一个把数据库里面的 null 变成 '' 的部分代码

//循环检测并把nuul转换成 ''---检测两层即可 ---建议各位多层用递归吧

public function null2Empty($arr){

if(is_array($arr)){

foreach ($arr as $k => $v) {

if($v === null){ $arr[$k] = ''; }//把null变成空

if(is_array($v)){

foreach ($v as $kk => $vv) {

if($vv === null){ $arr[$k][$kk] = ''; } //把null变成空

if(is_array($vv)){

foreach ($vv as $kkk => $vvv) {

if($vvv === null){ $arr[$k][$kk][$kkk] = ''; } //把null变成空

}

}

}

}

}

}

return $arr;

}

下面为一些常见的说法和讨论。

PHP是一种宽松类型的编程语言,在函数中对传入的参数值的“类型”以及”值是否为空或者NULL“进行检查是不可缺少的步骤。

类型检查

从PHP5开始,PHP允许对函数的参数进行类型约束,即可以约束参数的类型为对象,接口,数组或者callable,但是不可以约束参数类型为标量类型(如int ,string,bool),也不可以约束为Traits类型。如果不约束,默认情况下,参数的类型为mixed,即可以接受所有类型。

function test(array $names)//正确的做法

function test(string $name)//错误的做法

针对特定参数类型的功能函数,在函数中对参入的参数进行类型检查是很必须(虽然一些国外学者的文章,它们不推荐这么做,这么做相当于束缚了函数的功能)。

在PHP中可以通过gettype和get_resource_type 两个函数得到变量的类型,它们分别返回参数的类型和资源类型的字符串,此时可以直接进行字符串比较来确定类型是否正确。另外一种方式是通过is_***系列的函数来判断变量的类型是否为指定的类型,比如is_array,is_scalar,is_resource,is_string。

变量/常量是否定义或初始化

在PHP中,变量在定义以后不需要进行初始化,它会被初始化为具有其类型的默认值,但是不推荐这么做,一般情况下最好是对变量进行显示初始化。

对变量是否显式初始化可以使用”语法结构“-isset进行判断,它可以判断一个变量是否已经显式初始化。isset只有在变量”未显式赋值或者赋值为NULL“的时候返回为false,其他情况,比如值为空字符串,0等情况,它都返回true。

可以使用unset来删除一个已经定义的变量。

isset和unset只能是对”变量“进行判断和删除定义。如果是针对”常量“,那么就必须使用defined来判断。如果是针对”函数“,那么就必须使用function_exist()函数进行判断。

判断变量是否为NULL

在PHP中要判断一个变量是否NULL有很多方式:

is_null VS isset

这两个函数都可以来判断一个变量是否为NULL,它们对空字符串,0,false的认同是一样的。即is_null=! isset()。

但是isset是语法结构,is_null是函数。在性能上,语法结构相对要优秀一点。所以很多地方都推荐使用isset来代替is_null的使用。

== VS ===

在有些情况下,推荐使用isset来判断一个变量是否为NULL。

但是从语义上来说,一个变量”是否已显示初始化“和”是否为NULL“是不同的概念,在某些场景下使用isset是不合适的,比如检查一个函数的返回值是否为NULL。

此时可以使用"=="和”===“来判断它们是否为NULL。

对于"=="和”===“,它们直接的区别还是很大。对于"==",它认同空字符串,0,false都为NULL。而对于"===",只有一个变量真的为NULL,它才代表NULL。

另外"==="相对于"isset"来说,性能基本接近,甚至要好点。

因此综上述,判断一个变量是否为NULL最好的办法就是直接使用"===",这样就不用在is_null,isset之间犹豫。其实上述的结论也同理于False的判断。

empty()函数的认识

在判断变量是否为NULL时候,也会把empty这个函数拿来和isset之类的一起讨论。其实这个函数没有必要和他们进行比较,因为它代表的意思很简单,它的意思就是判断一个变量所存储的内容是否为零或者为空,而这里的空不仅仅是NULL。那么有哪些内容代表零或者空的概念呢?""、0、"0"、NULL、FALSE、array()、var $var; 以及没有任何属性的对象都将被认为是空的,都代表了为零。

如果$e是未定义或值为NULLL,$e=NULL,它肯定是空,即empty($e)=true;

如果$e是int类型,$e=0,就相对于数字,0代表为零,即empty($e)=true;

如果$e是string类型,$e="",相对于字符串,”“就代表为是空,即empty($e)=true;

如果$e是string类型,$e="0",相对于字符串,”0“就代表为是零,即empty($e)=true;

如果$e是bool类型, $e=false,相对true,false就代表为空,即empty($e)=true;

如果$e是array类型,$a=array(),相对数组来说,没有元素的数据就为空,即empty($e)=true;

除了当变量没有置值时不产生警告之外, empty() 是 (boolean) var 的反义词。

进一步阅读

类型约束:http://www.php.net/manual/zh/language.oop5.typehinting.php

Variable handling 函数:http://www.php.net/manual/zh/ref.var.php

PHP 类型比较表:http://www.php.net/manual/zh/types.comparisons.php

被爱的人意识不到爱,如同一颗星星意识不到发现它的天文学家一样。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459018.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8 Regular Expressions You Should Know

2019独角兽企业重金招聘Python工程师标准>>> Regular expressions are a language of their own. When you learn a new programming language, theyre this little sub-language that makes no sense at first glance. Many times you have to read another tutori…

poj 3278 catch that cow BFS(基础水)

Catch That CowTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 61826 Accepted: 19329Description Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a num…

制作已编译的html帮助文件

http://www.cnblogs.com/cm186man/archive/2008/03/10/1098896.html引用 HTML帮助文档从结构上来看可分为两个部分,运行器和文档内容。它的一个好处是能使帮助文档跨平台运行,只要有不同平台上的运行器和浏览器,帮助文档不再需要重新编制&…

matlab %3c handle,volume browser (updated).htm 源代码在线查看 - Matlab显式三维地震数据的源代码 资源下载 虫虫电子下载站...

Comments: any comments on this error:??? Error using > timesIntegers can only be combined with integers of the same class, or scalar doubles.Error in > interp3>linear at 368 F (( arg4(ndx).*(1-t) arg4(ndx1).*t ).*(1-s) ...Error in > inter…

PHPer转战Android的学习过程以及Android学习

原文作者: eoeadmin原文地址: http://my.eoe.cn/shuhai/archive/19684.html--------------------------------------------这篇文章主要写了一个PHP程序猿是如何转战学习Android的。 第一步:直接跨过java的学习,原因有我之前看过毕…

SQL中实现截取字符串的函数

SQL中实现截取字符串的函数 如果想实现从数据库中取数据时截取一个字段下的内容或者截取一串字符串,则能够实现这种效果的函数有Left,Right,SubString三个函数。1.Left函数:Left(character_expression , integer_expre…

php时区设置问题,PHP 的时区设置问题_PHP教程

装上PHP5后你会发现这样的问题:你也许会发现,输出的时间和你现在的时间是不相同的。原因是假如你不在程序或配置文件中设置你的服务器当地时区的话,PHP所取的时间是格林威治标准时间,所以和你当地的时间会有出入。格林威治标准时间…

HDU 5392 BC #51

就是求最大公倍数&#xff0c;但要用分解质因子求。 自己写的WA到爆。。。。 #include<iostream> #include<stdio.h> #include<math.h>#include<algorithm>using namespace std;#define rd(x) scanf("%d",&x) #define rd2(x,y) scanf(&q…

下拉框——把一个select框中选中内容移到另一个select框中遇到的问题

在使用jQuery实现把一个select框中选中内容移到另一个select框中功能时遇到了一个问题&#xff0c;就是点击按钮时内容可以到另一个select框中&#xff0c;但是到了另一个select框中的内容却很快闪退回原来的select框中&#xff0c;代码如下&#xff1a; <select class"…

windows API 串口编程参考

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** &#xff08;一&#xff09;Windows API串口通信编程概述 Windows环境下的串口编程与D…

jquery post php返回html,jquery ajax post 提交数据,返回的是当前网页的html?

代码如下用户名:密 码:$("#login_submit").bind("click",function(){var type "post";var url "index.php?madmin&cindex&acheckLogin";var formArrays $("#admin_form").serializeArray();var requestData …

[转]Android Studio系列教程六--Gradle多渠道打包

转自&#xff1a;http://www.stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/ Android Studio系列教程六--Gradle多渠道打包 2015 年 01 月 15 日 devtools本文为个人原创&#xff0c;欢迎转载&#xff0c;但请务必在明显位置注明出处&#xff01; 由于国内Andr…

服务器上装filezilla server后,本地的ftp客户端连接不上去

公司一台服务器&#xff0c;上面装了filezilla server后&#xff0c;按平常配置好了&#xff0c;但是在本地用FTP客户端不管怎么连接都连接不上&#xff0c;本地FTP客户端总提示连接失败&#xff0c;远程filezilla server的界面也没有提示有人连接&#xff0c; 仔细看了一下&am…

数据结构与算法之堆与堆排序

在数据结构中&#xff0c;堆其实就是一棵完全二叉树。我们知道内存中也有一块叫做堆的存储区域&#xff0c;但是这与数据结构中的堆是完全不同的概念。在数据结构中&#xff0c;堆分为大根堆和小根堆&#xff0c;大根堆就是根结点的关键字大于等于任一个子节点的关键字&#xf…

非法操作 login.php,阅文游戏中心 h5游戏接入wiki

阅文游戏中心《h5游戏 CP接口规范》接口要求规范游戏方接口说明&#xff1a;游戏方需按照规范提供&#xff0c;阅文进行调用阅文接口说明&#xff1a;阅文提供&#xff0c;游戏方调用参数 time 为Unix 时间戳(January 1 1970 00:00:00 GMT 起的秒数) &#xff0c;单位为秒编码统…

串口通信与编程:串口基础知识

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 串口是串行接口&#xff08;serial port&#xff09;的简称&#xff0c;也称为串行通信…

jmeter上传文件搞了一天,才搞定,没高人帮忙效率就是低,赶紧记下来,以备后用...

jmeter上传文件搞了一天&#xff0c;才搞定&#xff0c;没高人帮忙效率就是低&#xff0c;赶紧记下来&#xff0c;以备后用 先用谷歌浏览器抓包&#xff0c;抓到的包类似这样&#xff1a; 在jmeter里添加一个http请求&#xff0c;配置好参数&#xff0c;方法&#xff0c;端口&a…

自定义dialog

2019独角兽企业重金招聘Python工程师标准>>> R.layout.layout_insert_dialog自定义布局 View mViewLayoutInflater.from(MainActivity.this).inflate(R.layout.layout_insert_dialog, null); AlertDialog.Builder dialognew AlertDialog.Builder (MainActivity.this…

js unescape 对应php的函数,php实现Javascript的escape和unescape函数

由于需要用到php调用js文件&#xff0c;在网上找了相关的资料&#xff0c;并改写了相关的方法。php实现 Javascript的escape函数方法&#xff1a;function escape($str) {preg_match_all("/[/xc2-/xdf][/x80-/xbf]|[/xe0-/xef][/x80-/xbf]{2}|[/xf0-/xff][/x80-/xbf]{3}|[…

字符数组,字符串、数字转化

<p style"margin-top: 5px; margin-bottom: 5px; padding-top: 0px; padding-bottom: 0px; line-height: 26px; word-wrap: break-word; color: rgb(102, 102, 102); font-family: 宋体, Arial; font-size: 16px;">//****************************************…