3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PHP 言語構造ってなんだ???

Last updated at Posted at 2021-12-23

目的

  • 「オーバーヘットがあるからis_null()より言語構造のisset()empty()を使ったほうがいいかもね〜」って教えてもらって「言語構造」がそもそもよく分かっていなかったので調べてみた

言語構造

  • 下記のリンク先に記載されているキーワードはすべてPHPの言語構造である。

  • これらは言語を構成するものですと言われている通り、どうやらこの一覧に記載されているものはPHPの言語を構成するそのものらしい。

  • この一覧の中にissetemptyが含まれており、これらは呼び出し方法こそ関数に似ているけど関数とは全く別物らしい。

  • その証拠にissetemptyの公式マニュアルには注意: これは、関数ではなく 言語構造のため、可変関数 を用いて コールすることはできません。と記載されている。

  • ifとかclassとかも言語構造に含まれているらしく、たしかになんの疑問もなくif (式) {式がtrueのときの処理}みたいに書いてたけどこれはPHPの基礎部分となる言語構造に記載されているから処理分岐をする事ができているっぽい。

じゃあ先輩が言ってた「is_null()はオーバーヘットがあるから」はどういう意味か?

  • そもそもis_null()は引数に指定された変数がnullかどうかを調べる関数である。
  • この関数はPHP内部で定義されている。
  • PHP内部で定義されているということはユーザー定義関数と同じようにfunctionを用いてis_null()は定義されているということだ。
  • 当該の定義の中では「引数に指定された変数がnullの時trueを、null以外のときはfalseを返す処理」がPHPによって記載されている。
  • ここでis_null()isset()empty()で下記のような差が生まれる。
    • is_null()
      1. 定義されている関数を呼び出す。
      2. 引数を用いて処理を行う。
      3. 結果を返す。
    • isset()empty()
      1. 言語構造の振る舞いによって処理を行う。
      2. 結果を返す。
  • 要は、PHPの根幹部分に組み込まれている言語構造を用いるなら「定義されている関数を呼び出して内部でいくつかの処理をする」時間がかからないよね!ということだ。
  • もちろんis_null()の「関数呼び出し→引数を用いて処理」の時間は一瞬なので、気にするほど処理に差が出るわけではない。ただ、差があることは事実なので、積極的にその他の言語構造も使って処理速度を意識した実装をしてゆきたいと思った。
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?