[php]タイプヒンティング – 引数の変数型を限定する

Written by uechoco 3月 06
このエントリをはてなブックマークに追加[php]タイプヒンティング – 引数の変数型を限定するのはてなブックマーク被リンク数このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをBuzzurl(バザール)に追加

最近になってphpのメソッドの引数に変数型を指定してあるのをちらほら見かけるようになりました。具体的にはHTTP_Request2のSplSubjectやsymfony 1.2のソースコードなどで見つけました。調べてみると、ちゃんとマニュアルに書いてありますね。タイプヒンティングという機能名でした。メソッドだけではなく、通常の関数でも使えるようです。指定できるのはobject型かarray型。つまり特定のクラスとか配列に限定することができます。これは賢い。結構レベルが上がったかも。

百聞は一見に如かず。phpマニュアルに載っていた例を引用。

php:
  1. <?php
  2. // とあるクラス
  3. class MyClass
  4. {
  5.     /**
  6.      * テスト関数
  7.      *
  8.      * 第 1 引数は OtherClass 型のオブジェクトでなければならない
  9.      */
  10.     public function test(OtherClass $otherclass) {
  11.         echo $otherclass->var;
  12.     }
  13.  
  14.  
  15.     /**
  16.      * もう一つのテスト関数
  17.      *
  18.      * 第 1 引数は配列でなければならない
  19.      */
  20.     public function test_array(array $input_array) {
  21.         print_r($input_array);
  22.     }
  23. }
  24.  
  25. // もう一つのサンプルクラス
  26. class OtherClass {
  27.     public $var = 'Hello World';
  28. }
  29. ?>
  30.  
  31. タイプヒントの指定を満たさないとキャッチ可能な致命的エラーとなります。
  32. <?php
  33. // それぞれのクラスのインスタンス
  34. $myclass = new MyClass;
  35. $otherclass = new OtherClass;
  36.  
  37. // Fatal Error: Argument 1 must be an object of class OtherClass
  38. $myclass->test('hello');
  39.  
  40. // Fatal Error: Argument 1 must be an instance of OtherClass
  41. $foo = new stdClass;
  42. $myclass->test($foo);
  43.  
  44. // Fatal Error: Argument 1 must not be null
  45. $myclass->test(null);
  46.  
  47. // Works: Prints Hello World
  48. $myclass->test($otherclass);
  49.  
  50. // Fatal Error: Argument 1 must be an array
  51. $myclass->test_array('a string');
  52.  
  53. // 動作する: 配列の内容を表示する
  54. $myclass->test_array(array('a', 'b', 'c'));
  55. ?>
  56.  
  57. タイプヒンティングは、関数でも使用できます。
  58. <?php
  59. // とあるクラス
  60. class MyClass {
  61.     public $var = 'Hello World';
  62. }
  63.  
  64. /**
  65.  * テスト関数
  66.  *
  67.  * 第 1 引数は MyClass 型のオブジェクトでなければならない
  68.  */
  69. function MyFunction (MyClass $foo) {
  70.     echo $foo->var;
  71. }
  72.  
  73. // 動作する
  74. $myclass = new MyClass;
  75. MyFunction($myclass);
  76. ?>
  77.  
  78. タイプヒントには NULL 値を使用することもできます。
  79. <?php
  80.  
  81. /* NULL 値も使えます */
  82. function test(stdClass $obj = NULL) {
  83.  
  84. }
  85.  
  86. test(NULL);
  87. test(new stdClass);
  88.  
  89. ?>

このエントリをはてなブックマークに追加[php]タイプヒンティング – 引数の変数型を限定するのはてなブックマーク被リンク数このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをBuzzurl(バザール)に追加

3 Responses to “[php]タイプヒンティング – 引数の変数型を限定する”

  1. コメント by isocchi on 2009 年 3 月 6 日 16 : 58 : 38

    >メソッドだけではなく、通常の関数でも使えるようです。
    メソッドと関数って違うの?(゜_。)?(。_゜)?

    あと、コメント欄のNameとかWebsiteで、フォントカラーとバックグランドカラーが似ていて見にくい(´・ω・`)

  2. コメント by uechoco on 2009 年 3 月 7 日 01 : 18 : 11

    >isocchi
    頭の中ではメソッド=クラスの関数、関数=クラスに所属してない関数っていう分類だけど、言語によって呼び名が違うからなんともいえないね。phpだと両方とも関数って呼ぶのかな。

    フォントカラーは確かにおかしい。直します。ありがとう!

  3. コメント by isocchi on 2009 年 3 月 7 日 17 : 12 : 33

    あぁー、ActionScriptでいうグローバル関数とかそういうやつか
    あとパッケージ関数とかもかぁ

    Javaにはないかも

    フォント見やすくなったー

Comments RSS rss うえちょこ@ぼろぐ TrackBack Identifier URI rss うえちょこ@ぼろぐ

コメントをどうぞ