PHPで利用できる関数やクラス、定義済みの定数や変数を表示する | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

PHPの小文字から始まる関数が4405個もあってびっくりした件 @ ゆーすけべー日記


それ、get_fun・・・ってはてブコメント欄ですでに指摘があったか。

関数の数以外にもクラスや定数、変数の数も調べることが出来たりします。



利用できる関数やクラスの一覧を取得する


get_defined_functions 関数で利用できる関数一覧を取得することができます。

ただし、あくまで自分の環境で利用できる関数なのでPHP全体で使える関数の数とは異なります。


$ php -r 'var_dump(get_defined_functions());'
array(2) {
  ["internal"]=>
  array(1529) {
    [0]=>
    string(12) "zend_version"
    [1]=>
    string(13) "func_num_args"
    [2]=>
    string(12) "func_get_arg"
    [3]=>
    string(13) "func_get_args"
    [4]=>
    string(6) "strlen"
    [5]=>
    string(6) "strcmp"
-snip-
    [1526]=>
    string(27) "xmlwriter_write_dtd_attlist"
    [1527]=>
    string(23) "xmlwriter_output_memory"
    [1528]=>
    string(15) "xmlwriter_flush"
  }
  ["user"]=>
  array(0) {
  }
}


それでも1500を超え取る・・・。

もし自分オリジナルで作成した関数(includeやrequireしているもの含め)がある場合は、最後の"user"キーの所に表示されるので、使い方によっては便利な関数かもしれません。


  ["user"]=>
  array(1) {
    [0]=>
    string(6) "myfunc"
  }


自分も関数名までは覚えているものはほとんど無く、過去に「あーこういう動きする関数って確かあったなぁ」ぐらいしか覚えてません。

そういう意味では、マニュアルサイト は超重要。


お次は、クラスの場合。

クラスは、get_declared_classes 関数を利用します。

クラスなんて定義してないよっと見てみると・・・。


$ php -r 'var_dump(get_declared_classes());'
array(96) {
  [0]=>
  string(8) "stdClass"
  [1]=>
  string(9) "Exception"
  [2]=>
  string(14) "ErrorException"
  [3]=>
  string(11) "LibXMLError"
-snip-
  string(6) "PDORow"
  [93]=>
  string(9) "XMLReader"
  [94]=>
  string(9) "XMLWriter"
  [95]=>
  string(13) "XSLTProcessor"
}


え?こんなにあるの?って感じで。

こちらもユーザー定義のクラスがある場合でも一覧に出力されます。



定義済みの定数や変数を取得する


定義済み定数を取得したい場合は、get_defined_constants 関数を使います。


$ php -r 'var_dump(get_defined_constants());'
array(1300) {
  ["E_ERROR"]=>
  int(1)
  ["E_WARNING"]=>
  int(2)
  ["E_PARSE"]=>
  int(4)
  ["E_NOTICE"]=>
  int(8)
  ["E_STRICT"]=>
  int(2048)
  ["E_CORE_ERROR"]=>
  int(16)
  ["E_CORE_WARNING"]=>
  int(32)
  ["E_COMPILE_ERROR"]=>
  int(64)
-snip-
  ["STDIN"]=>
  resource(1) of type (stream)
  ["STDOUT"]=>
  resource(2) of type (stream)
  ["STDERR"]=>
  resource(3) of type (stream)
}


PHP内部で定義されている定数だけでも1300・・・。
気を取り直して、定義済みの変数一覧はget_defined_vars で取得できるので表示してみると・・・。


$ php -r 'var_dump(get_defined_vars());'
array(8) {
  ["GLOBALS"]=>
  &array(8) {
    ["GLOBALS"]=>
    &array(8) {
      ["GLOBALS"]=>
      *RECURSION*
      ["argv"]=>
      array(1) {
        [0]=>
        string(8) "test.php"
      }
      ["argc"]=>
      int(1)
-snip-
    ["DOCUMENT_ROOT"]=>
    string(0) ""
    ["REQUEST_TIME"]=>
    int(1267630052)
    ["argv"]=>
    array(1) {
      [0]=>
      string(1) "-"
    }
    ["argc"]=>
    int(1)
  }
}

グローバル変数もこんなにあるのか・・・。

こちらもユーザー定義の定数や変数が出せるので、無駄に変数を定義していないかリファクタリングなどに活用できるかもしれません。


まぁ、デフォルトで定義済みのものがあまりの多いんですけどね・・・。