Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
78
Help us understand the problem. What is going on with this article?
@kazu56

【PHP】タイプヒンティング

More than 5 years have passed since last update.

これ何?

パラメータの型を指定できる。

指定できる型は、オブジェクト、インターフェイス、配列、callable(PHP5.4以降)。クラスや、インターフェイスを指定した場合、その子クラスや実装クラスも利用できる。

スカラー型(intやstringやbool)は使えない。

具体例

1.array

array以外を渡すとエラー。

function type_test(array $array){   
}

//タイプヒントがarrayなのに、パラメータがint型なのでエラー。
type_test(1);
//=>Catchable fatal error:Argument 1 passed to type_test() must be of the type array, integer given

2.オブジェクト

タイプヒントとパラメータのクラスの型が違うとエラー。

Class MyClass{
}

Class OtherClass{
}

function type_test(MyClass $class){
}

//タイプヒントがMyClassなのでこれはOK
type_test(new MyClass);

//タイプヒントとパラメータのクラスの型が違うのでエラー
type_test(new OtherClass);
//=>Catchable fatal error: Argument 1 passed to type_test() must be an instance of MyClass, instance of OtherClass given,

タイプヒントが親クラス、パラメータが子クラスでもでもOK。

Class MyClass{
}

Class ChildOfMyClass extends MyClass{
}

function type_test(MyClass $class){
}

//OK
type_test(new ChildOfMyClass);

3.インターフェイス

タイプヒントとパラメータのインターフェイス先の型が違うとエラー。

interface MyInterface{
}

Class MyClass implements MyInterface{
}

Class OtherClass{
}

function type_test(MyInterface $class){
}

//これはOK
type_test(new MyClass);

//タイプヒントとパラメータのインターフェイス先の型が違うのでエラー
type_test(new OtherClass);
//=>Catchable fatal error: Argument 1 passed to type_test() must implement interface MyInterface, instance of OtherClass given,

4.callable

少しわかりづらいけど、コールバック可能な、つまり、存在する関数でないとエラーになる。

function func(){
}

function type_test(callable $func){
}

//存在する関数なのでOK
type_test('func');

//存在しない関数なのでエラー。
type_test('not_exists_func');
//=>Catchable fatal error: Argument 1 passed to type_test() must be callable, string given

メリットは?

  • パラメータに何を渡したら良いかすぐにわかるので可読性が上がる。
  • パラメータの型が保障される。パラメータの型が違うことが原因の不具合はすぐに検出できる。簡易的なパラメータチェック。
78
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
kazu56

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
78
Help us understand the problem. What is going on with this article?