【PHP】関数と関数っぽい言語構造の違い

  • 2020年7月7日
  • PHP

 PHP は人工的に作られた言語であり、その構造は明文化されています。この構造中では if, else, while, foreach, class など名前を変えることができないなど扱いがガチガチに決まっている部分があります。そうした特別な意味を持つ語は次にまとまっています。
PHP: キーワードのリスト – Manual
 このまとまっている中に普段、関数の様に扱っているものがあります。特によく使われているのはおそらく isset でしょう。この関数っぽい言語構造は普通に呼び出すだけでは関数と全く同じように振る舞いますが、いくつか異なる振る舞いを持ちます。例えば次です。

<?php
$functionName = 'var_dump';
$functionName(null);// null を var_dump します。

$functionName = 'isset';
$functionName(null);
// 次の致命的エラーがでます。
// Fatal error:  Call to undefined function isset()

 PHP には可変関数という仕組みがあります。これはカッコつきで変数を呼び出した場合、変数に格納された語の関数を実行する機能です。
PHP: 可変関数 – Manual
 可変関数では厳密に関数でなければ対象を呼び出せません。故に言語構造である isset は可変関数で呼び出せず、未定義であると致命的エラーが出力されました。
 これの関数でない、というのはコールバック関数の対象に取れないということでもあります。例えば第二引数に取った関数、あるいは関数名の指す関数の返り値でフィルタリングを行う関数である array_filter では次の様になります。
 PHP: array_filter – Manual

<?php
array_filter([], 'strlen');
// 文字列長が 0 より長い要素のみ残る
array_filter([], 'isset');
// isset は関数でないので次の様に警告が出る
// Warning:  array_filter() expects parameter 2 to be a valid callback, function 'isset' not found or invalid function nam

 PHP を使うだけなら実感することが稀な違いですが知っておくとちょっと便利です。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG