PHP 型別判斷和NULL,空值檢查

2022-01-10 19:13:09 字數 2263 閱讀 6454

php是一種寬鬆型別的程式語言,在函式中對傳入的引數值的「型別」以及」值是否為空或者null「進行檢查是不可缺少的步驟。

從php5開始,php允許對函式的引數進行型別約束,即可以約束引數的型別為物件,介面,陣列(php 5.1開始)或者callable(php5.4起),但是不可以約束引數型別為標量型別(如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()函式進行判斷。

在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的判斷。

在判斷變數是否為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 的反義詞。

PHP 型別判斷和NULL,空值檢查

php是一種寬鬆型別的程式語言,在函式中對傳入的引數值的 型別 以及 值是否為空或者null 進行檢查是不可缺少的步驟。從php5開始,php允許對函式的引數進行型別約束,即可以約束引數的型別為物件,介面,陣列 php 5.1開始 或者callable php5.4起 但是不可以約束引數型別為標量型...

hive 空值 null判斷

hive中空值判斷基本分兩種 1 null 與 n hive在底層資料中 如何儲存和標識null,是由 alter table name set serdeproperties serialization.null.format n 引數控制的 比如 1.設定 alter table name se...

空值判斷 型別判斷

一 判斷乙個物件是不是空 4種方法 1.object.getownpropertynames 返回值是物件中屬性名組成的陣列 如果是空陣列,即為空 eg let obj console.log object.getownpropertynames obj name age 不是空 2.轉化成字串 s...