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

php

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

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

/**
* もう一つのテスト関数
*
* 第 1 引数は配列でなければならない
*/
public function test_array(array $input_array) {
print_r($input_array);
}
}

// もう一つのサンプルクラス
class OtherClass {
public $var = ‘Hello World’;
}
?>

タイプヒントの指定を満たさないとキャッチ可能な致命的エラーとなります。
test(‘hello’);

// Fatal Error: Argument 1 must be an instance of OtherClass
$foo = new stdClass;
$myclass->test($foo);

// Fatal Error: Argument 1 must not be null
$myclass->test(null);

// Works: Prints Hello World
$myclass->test($otherclass);

// Fatal Error: Argument 1 must be an array
$myclass->test_array(‘a string’);

// 動作する: 配列の内容を表示する
$myclass->test_array(array(‘a’, ‘b’, ‘c’));
?>

タイプヒンティングは、関数でも使用できます。
var;
}

// 動作する
$myclass = new MyClass;
MyFunction($myclass);
?>

タイプヒントには NULL 値を使用することもできます。

[/phpcode]


About: uechoco


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

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

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

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

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

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

    Javaにはないかも

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

Comments are closed.