最新コラム
-
-
-
Webサイト制作
【2023年版】国内・海外のおすすめVPS10選
-
Webサイト制作
初心者でも5分で分かる!SSL/TLSとは何か?
-
SEO外部対策SEO対策
Googleが推奨するnofollowの正しい使い方とは?
isset、empty、is_nullは渡された値によってture若しくはfalseを返します。
判定したい情報によって関数を使い分けるというのが一般的です。
主にissetはその変数が存在するかを判定します。
emptyはその変数の中身が空かどうかを判定します。
is_nullはその変数の中身がNULLかどうかを判定します。
isset | empty | is_null | |
---|---|---|---|
“” | true | true | false |
0 | true | true | false |
NULL | false | true | true |
array() | true | ture | false |
チェックする項目は違いますが、チェックする値を何にするかという段階でどの関数を使用するか決めておくことで
ほとんどの場合どの関数でもシステムを組むことは可能になると思われます。
先程あげた3つの関数を1000万回動作させた場合どの程度処理時間が異なるのかを検証してみました。
検証用のプログラムはこちらになります。
<?php $check_data = null; // issetの処理 $start_time = microtime(true); for ($i=0; $i<=100000000;$i++) { if (isset($check_data2)) { } } $end_time = microtime(true); echo 'isset処理時間:'.($end_time - $start_time)."秒\n"; // emptyの処理 $start_time = microtime(true); for ($i=0; $i<=100000000;$i++) { if (empty($check_data)) { } } $end_time = microtime(true); echo 'empty処理時間:'.($end_time - $start_time)."秒\n"; // is_nullの処理 $start_time = microtime(true); for ($i=0; $i<=100000000;$i++) { if (is_null($check_data)) { } } $end_time = microtime(true); echo 'is_null処理時間:'.($end_time - $start_time)."秒\n";
出力結果は以下のようになりました。
これは10回ほど動作させましたが似たような数値となりました。
isset処理時間:3.7318530082703秒 empty処理時間:4.00919008255秒 is_null処理時間:10.605492830276秒
この結果から一番はやい関数はissetになり次にemptyそして2倍以上の時間をかけてis_nullが実行されていたことが分かりました。
では、それぞれの関数の処理時間に差が出たのはなぜでしょうか?
それはissetとemptyは正確にいうと関数ではなく、この3つの中で関数なのはis_nullだけだからです。
ではissetとemptyは一体何なのでしょうか?
この2つは関数ではなくPHPの言語自体に組み込まれた言語構造になります。
言語構造とはPHPの言語自体を動作させる記述に組み込まれた機能になります。
echo等も言語構造に含まれ
echoの記述が
の様に様々な記述の仕方が許されているのも関数では無いからになります。
PHPの言語構造に記載されているものは
一部抜粋(参考:PHP のキーワード)
上記の様にPHPのコーディングでよく使われるものが言語構造に組み込まれています。
このPHPのキーワードに記載されて居ないものが関数として定義されているものとなります。
では何故言語構造だと関数より早いのか
それは言語構造は言語に最初から存在するものとしてハードコーディングされている為
関数よりも先に確認に行く為です。
つまり、同じ動作とさせる際に関数の機能よりも言語構造の機能を採用できるように
コーディングをする事で、何も考えずに作ったシステムよりもより高速化ができるという事になります。
PHPでシステムを構築する場合、基本的にはDBとのデータのやり取りが
速度のネックになりやすいですが、DB周りのチューニングをしっかりと行っていくと
コード内の細かな記述方法により少しずつですがシステムの速度に差が出てきます。
この微々たる差でも、多量のアクセスが有るシステム等では、1アクセスに付き同じだけ速度の差が出て来るため
システムの処理能力に大きな影響を及ぼすかもしれません。
ワンランク上のPHP技術者になるためには言語構造を意識してコーディングをしていくと良いかもしれません。