LoginSignup
1
0

More than 3 years have passed since last update.

型宣言についてまとめる

Posted at

これまでしてこなかった型宣言について
公式の内容を纏めて自分なりに解釈してみました。

参考: PHP.net

なぜ型宣言をするのか?

そもそもの型宣言とはなにか?

関数のパラメータや戻り値、 クラスのプロパティ (PHP 7.4.0 以降) に対して型を宣言することができます。 これによって、その値が特定の型であることを保証できます。 その型でない場合は、TypeErrorがスローされます。

自分なりに解釈すると
パラメータや戻り値が定義されていることで求めた型以外が参照された場合に
エラーを返すことによって大きなバグになることを事前に防いでいるのかと考えます。
またバグ出た際の原因追求もしやすくなるのかなと思います。

わかりやすく言うと
スーパーとかがイメージしやすいのかなと!
お酒コーナーにはお酒をおいてあるのでそこから持ち出したら
もちろんお酒を持っていくことになりますよね!
お菓子コーナーから商品を持ち出したらそれはもちろんお菓子です。
そのメソッドを使ってどんな反応が返ってくるのか
その範囲、カテゴリを指定することでおおよその返り値を想定することが出来る。
そんなイメージがわかりやすいかなと思います。

基本的な型

説明 ver
クラス/インターフェイスの名前 値が指定したクラスやインターフェイスのインスタンでなければいけません。
self 値がそのメソッドが定義されているクラスと同じクラスのインスタンスでなければいけません。クラスの内部でのみ使えます。
array 値が配列でなければいけません。
callable 値がcallableでなければいけません。クラスのプロパティの型では宣言できません。
bool 値がbool値でなければいけません。
float 値がfloatでなければいけません。
int 値がintでなければいけません。
string 値が文字列でなければいけません。
iterable 値が配列か、Traversableのインスタンスでなければなりません。 PHP 7.1.0以降
object 値がobjectでなければなりません。 PHP 7.2.0以降
mixed 値はあらゆる値であることが出来ます。 PHP 8.0.0以降

※union型

型をunionとして宣言するとひとつではなく複数の異なる型を値として受け入れることが出来る。

<?php
function getItem(): T1|T2...
{
    //返り値はT1|T2となる
}

※mixed型

mixed型は
array|bool|callable|int|float|object|resource|string|null
と同等の型です。

Nullを許容する型宣言

型の名前の前にクエスチョンマークを付けることで
返り値がnullである場合も許容される

<?php
function getItem(): ?string
{
    //返り値はnull|stringのどちらかである
}

返り値でのみ有効な型

void

voidは関数が値を返さないことを示す戻り値の型

static

値が、メソッドが呼び出されているクラスと同じインスタンスでなければいけない。

型宣言は完全でもなければ最低限でもない

他の言語のことは知らないのでなんとも言えませんが
型の扱いがゆるいイメージのPHP特有なのか
型宣言をしたからと言って必ずしもその型で扱われているとも限らない
わかりやすい例でコードを書くと

<?php
function getItem(): int|string
{
    //
    return true;
}

上記のコードでは
true = 1
とした扱いになり
intとboolは互換性がありエラーとはならないので
型を定義したのであればしっかりと定義した型で
返してあげるようにしたほうがいいかと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0