在一些接口和数据库的设计中。数据库的非必填字段可能为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

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

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

  1. C#中判断空字符串的3种方法性能分析【月儿原创】

    C#中判断空字符串的3种方法性能分析 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/           时间:2007.4.28  3种方法分别是:string ...

  2. oracle中判断空,Oracle中判断空游标的方法

    1.声明包 create or replace package TAL_TEST is -- Author : ADMINISTRATOR -- Created : 2012/12/9 15:15:3 ...

  3. .NET深入学习笔记(2):C#中判断空字符串的4种方法性能比较与分析

    偶然看到<C#中判断空字符串的3种方法性能分析 >作者:清清月儿  主页:http://blog.csdn.net/21aspnet/           时间:2007.4.28 写的一 ...

  4. C#中判断空字符串的3种方法性能分析 1

    C#中判断空字符串的3种方法性能分析 作者:杨义贤 主页:http://blog.csdn.net/lucky_yyx       时间:2007.4.29  3种方法分别是:string a=&qu ...

  5. shell中判断空字符串和有趣的空字符串

    Introduction Shell 中判断空字符串 以及有趣的空字符串 判断字符串是否为空 Example1 if [[ -z "$str" ]] thenecho " ...

  6. js中判断空数组和空对象的方法

    复习的时候做一些学习的笔记总结. javascript的值的类型: 原始值:number.string.boolean.undefined.null.symbol(ES6).bigint(ES10) ...

  7. “方法X对于类型Y是模糊的” Java模糊方法调用null错误

    If you are reading this, chances are you got The method X is ambiguous for the type Y error when com ...

  8. Oracle中判断空游标的方法

    2019独角兽企业重金招聘Python工程师标准>>> 声明:本文是在看完一个帖子,经过自己测试验证后得出来的一些结论,如果大家有更好的解决办法,可以留言,如有错误请指出.谢谢~ 1 ...

  9. VB中判断空的几种方法,Null, Missing, Empty, Nothing, vbNullString区别

    vb6中存在几个虚幻的值:Null.Missing.Empty.Nothing.vbNullString.除了最后一个之外,每一个值都不能直接用"a=值"来判断.下面分别解释一下这 ...

最新文章

  1. 阿里云域名注册和虚拟云主机
  2. 均值滤波java_均值滤波,中值滤波,最大最小值滤波
  3. com+组件日志记录(log4net)
  4. saltstack批量加用户脚本
  5. STL-bitset源码解析
  6. Windows和Mac安装JDK及环境变量配置
  7. 关于数据库的水平切分和垂直切分的一些概念(转)
  8. 分享一个最新思考的创业项目
  9. CSS overflow属性与display属性
  10. 商用平板 移动金融潜力巨大的应用平台
  11. Cocos2d-x 3.X手游开发实例详解
  12. 分模块开发创建service子模块——(八)
  13. Python3 网络编程
  14. 让你做个《五子棋》怎么存储棋盘上的棋子信息?
  15. 基于单片机USB接口的温度控制器
  16. WINDOWS常见问题的最佳解决方案
  17. 最新版Mysql安装步骤
  18. python中文姓名排序_Python实现针对中文排序的方法
  19. 支付宝小程序-实名认证流程讲解
  20. keras网易日月光华笔记

热门文章

  1. jquery.dataTables.min.js:62 Uncaught TypeError: Cannot read property ‘style‘ of undefined原因
  2. Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程
  3. 数据特征分析:2.对比分析
  4. jquery评分效果Rating精华版
  5. ForkJoinPool 学习示例
  6. ASP.NET-权限管理五张表
  7. 快速切換手機版網頁語法
  8. [转贴]怎样规划你毕业以后的人生
  9. 物业公司工作流应用方案
  10. vue-i18n使用及踩坑记录