[php]タイプヒンティング – 引数の変数型を限定する
最近になってphpのメソッドの引数に変数型を指定してあるのをちらほら見かけるようになりました。具体的にはHTTP_Request2のSplSubjectやsymfony 1.2のソースコードなどで見つけました。調べてみると、ちゃんとマニュアルに書いてありますね。タイプヒンティングという機能名でした。メソッドだけではなく、通常の関数でも使えるようです。指定できるのはobject型かarray型。つまり特定のクラスとか配列に限定することができます。これは賢い。結構レベルが上がったかも。
百聞は一見に如かず。phpマニュアルに載っていた例を引用。
php:
-
<?php
-
// とあるクラス
-
class MyClass
-
{
-
/**
-
* テスト関数
-
*
-
* 第 1 引数は OtherClass 型のオブジェクトでなければならない
-
*/
-
public function test(OtherClass $otherclass) {
-
}
-
-
-
/**
-
* もう一つのテスト関数
-
*
-
* 第 1 引数は配列でなければならない
-
*/
-
}
-
}
-
-
// もう一つのサンプルクラス
-
class OtherClass {
-
public $var = 'Hello World';
-
}
-
?>
-
-
タイプヒントの指定を満たさないとキャッチ可能な致命的エラーとなります。
-
<?php
-
// それぞれのクラスのインスタンス
-
$myclass = new MyClass;
-
$otherclass = new OtherClass;
-
-
// Fatal Error: Argument 1 must be an object of class OtherClass
-
$myclass->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');
-
-
// 動作する: 配列の内容を表示する
-
?>
-
-
タイプヒンティングは、関数でも使用できます。
-
<?php
-
// とあるクラス
-
class MyClass {
-
public $var = 'Hello World';
-
}
-
-
/**
-
* テスト関数
-
*
-
* 第 1 引数は MyClass 型のオブジェクトでなければならない
-
*/
-
function MyFunction (MyClass $foo) {
-
}
-
-
// 動作する
-
$myclass = new MyClass;
-
MyFunction($myclass);
-
?>
-
-
タイプヒントには NULL 値を使用することもできます。
-
<?php
-
-
/* NULL 値も使えます */
-
function test(stdClass $obj = NULL) {
-
-
}
-
-
test(NULL);
-
test(new stdClass);
-
-
?>
3 Responses to “[php]タイプヒンティング – 引数の変数型を限定する”
Comments RSS
TrackBack Identifier URI
コメントする

>メソッドだけではなく、通常の関数でも使えるようです。
メソッドと関数って違うの?(゜_。)?(。_゜)?
あと、コメント欄のNameとかWebsiteで、フォントカラーとバックグランドカラーが似ていて見にくい(´・ω・`)
>isocchi
頭の中ではメソッド=クラスの関数、関数=クラスに所属してない関数っていう分類だけど、言語によって呼び名が違うからなんともいえないね。phpだと両方とも関数って呼ぶのかな。
フォントカラーは確かにおかしい。直します。ありがとう!
あぁー、ActionScriptでいうグローバル関数とかそういうやつか
あとパッケージ関数とかもかぁ
Javaにはないかも
フォント見やすくなったー