市役所

市役所

学習演習

はじめに

型宣言

PHPの型宣言は、関数の引数、戻り値、クラスのプロパティに対して、実行時に型アサーションを行います。 関数では、戻り値の型にvoidを指定すると、その関数が値を返さないことを示せます。 宣言した型は、関数が適切な型の戻り値を返していることを実行時に確認する役割も果たします。

<?php

class Driver
{
    private int $serial_number;

    public function setSerialNumber(int $number): void
    {
        $this->serial_number = $number;
    }

    public function getSerialNumber(): int
    {
        return $this->serial_number; 
    }
}

$driver = new Driver();
$driver->setSerialNumber("Version 1b"); // This will throw a TypeError

共用体型

関数の引数、戻り値、クラスのプロパティが複数の型を取りうる場合は、共用体型を宣言できます。

<?php

class IdentityCard
{
    private int|null $id = null;

    public function assign(int|float $id): void
    {
        $this->id = intval($id);
    }
}

$card = new IdentityCard();
$card->assign(5.0);

mixed型

コードを書いていると、型を特定できないことがあります。 PHP 8.0からは、mixedという抜け道になる型が用意されています。 mixedは、object|resource|array|string|float|int|bool|nullという共用体型と同じ意味です。

説明

しばらく市役所で働くうちに、日々の仕事を効率化するツールをいくつか作ってきました。たとえば、書類の記入を楽にするものです。

そこへ新しい同僚が加わることになり、作ったツールが必ずしも分かりやすいとは限らないことに気づきました。 職場には変わった習慣がたくさんあります。たとえば、書類は必ず大文字で記入する、項目を空欄のままにしない、といったことです。

そこで最初のステップとして、新しい同僚がすぐに使い始められるように、PHPの型宣言を追加することにしました。

1. Addressクラスの型を宣言する

宣言されているAddressクラスの各プロパティに、プロパティの型宣言を追加してください。 各クラスプロパティは文字列として宣言します。

2. 空欄で書類を記入するための型を宣言する

Formクラスのblanksメソッドに、仮引数の型宣言と戻り値の型宣言を追加してください。 このメソッドは、整数の長さを受け取り、空欄の行を表す文字列を返します。

3. 値を1文字ずつに分割するときの型を宣言する

Formクラスのlettersメソッドに、仮引数の型宣言と戻り値の型宣言を追加してください。 このメソッドは、単語を表す文字列を受け取り、文字の配列を返します。

4. 値が書類に収まるかどうかを確認するときの型を宣言する

FormクラスのcheckLengthメソッドに、仮引数の型宣言と戻り値の型宣言を追加してください。 このメソッドは、文字列の単語と整数の最大長を受け取り、trueまたはfalseを返します。

5. 書類で住所を整形するときの型を宣言する

FormクラスのformatAddressメソッドに、先ほど更新したAddressクラスを利用した仮引数の型宣言と、戻り値の型宣言を追加してください。 このメソッドは、Addressを受け取り、整形された文字列を返します。

GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
PHP Exercism

市役所を始める準備はできましたか?

Exercismに登録すれば、11個のコンセプト122個の演習、そして本物の人間によるメンタリングとともに、PHPを学んでマスターできます。すべて無料です。