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.pswp.cn/news/459018.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/459018.shtml
英文地址,請注明出處:http://en.pswp.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;">//****************************************…