NULL合体演算子・NULL判定関数の値
perl を使ってたころは「未定義」に関してあまり意識しなかったのですが、
php では、null と未定義の違いがチェックされ、wordpress でdebug=true にすると、警告エラーがでてくるので
確認の意味で....
とりあえず、if( $ver )で、未定義の警告エラーが出るときは、
if( isset( $var ) ) の代わりに、if( $var??null ) とかやっても、
警告エラーの回避が出来そうですね。
NULL合体演算子
$a=null; var_dump($a??"***")
string(3) "***"var_dump($b??"***")
string(3) "***"$c=""; var_dump($c??"***")
string(0) ""$d=0; var_dump($d??"***")
int(0)$e=[]; var_dump($e??"***")
array(0) { }$f["x"]=5; var_dump($f["y"]??"***")
string(3) "***"$f[1]=6; var_dump($f[$x??1])
int(6)$h=false; var_dump($h??"***")
bool(false)var_dump($i??$j??$k??"***")
string(3) "***"$k=8; var_dump($i??$j??$k??"***")
int(8)$j=7; $k=8; var_dump($i??$j??$k??"***")
int(7)var_dump( 1, "1", null, false, true )
int(1) string(1) "1" NULL bool(false) bool(true)$array = explode ( "&", "aaa=111&bbb=&ccc=333&ggg&ddd=444&" ); foreach( $array as $str ){ $xxx = explode( "=", $str ); $hash[ $xxx[0]] = $xxx[1]??null; // ※1 } var_dump( $hash );
※1 gggの値が未定義になるのを、?? で NULLに置き換え
bbb= は、なにもしなくても、空白になります
array(6) { ["aaa"]=> string(3) "111" ["bbb"]=> string(0) "" ["ccc"]=> string(3) "333" ["ggg"]=> NULL ["ddd"]=> string(3) "444" [""]=> NULL }※注記:以下のように list()で分割すると 未定義エラーになる。 foreach( $array as $str ){ list( $key, $value ) = explode( \'=\', $str ); $hash[ $key ] = $value; };$hash["zzz"] が未定義の時・・・ if( $hash["zzz"] )→未定義なのでエラー; if( $hash["zzz"] ??"" )→空白変換で「偽」; if( $hash["zzz"] ??null )→NULL変換で「偽」
string(0) "" NULL
NULL判定関数
$hoge | isset($hoge) | empty($hoge) | is_null($hoge) | $hoge == null | $hoge === null |
---|---|---|---|---|---|
宣言なし | bool(false) | bool(true) | bool(true) | bool(true) | bool(true) |
初期値なし | bool(false) | bool(true) | bool(true) | bool(true) | bool(true) |
0 | bool(true) | bool(true) | bool(false) | bool(true) | bool(false) |
"" | bool(true) | bool(true) | bool(false) | bool(true) | bool(false) |
false | bool(true) | bool(true) | bool(false) | bool(true) | bool(false) |
null | bool(false) | bool(true) | bool(true) | bool(true) | bool(true) |
"0" | bool(true) | bool(true) | bool(false) | bool(false) | bool(false) |
array() | bool(true) | bool(true) | bool(false) | bool(true) | bool(false) |
array(5) | bool(true) | bool(false) | bool(false) | bool(false) | bool(false) |
※このページはテスト用です。URLを変更する可能性が高いので要注意!