PHP8.1 Enumerations とReadonly

最新のバージョンであるPHP8.1が2021年11月25日にリリースされました。
サポートもとっくに切れてるPHP5.6をいまだに使ってるので新しいバージョンを使うのはいつになるかと
思っていますがさて最新ではどんなものが追加されたかとみてました。

https://www.php.net/releases/8.1/en.php

  • Enumerations
  • Enum?このバージョンまでなかったのか..なくてもまあめちゃめちゃ困るということはなかったが
    確かにリンク先のようにしたりdefineで定義してたり列挙型っぽくしてたのであるといいか。

  • Readonly Properties
  • ReadOnlyのアクセス修飾子
    一度だけ初期化可能でそのあとは変更不可

    https://php.watch/versions/8.1/readonly
    上記に記載されているが
    これが

    こう書ける

    実際に以下のようにすると6行目でエラーになっちゃう

    ちなみに初期化はクラス内であればどこでも可
    さっきはコンストラクタだったが初期化用の関数からでも以下のように

    当然このあと$user->fetch(16);と呼ぶとエラーに。

    クラスのスコープ外だとそれはできないと

    あとreadonlyプロパティはunset呼べない。

    Readonly property User::$uid must have type..
    Readonlyは型をつけないとエラー、8.0で追加されたmixed型が使えるとのこと

    Readonlyなんだけど以下のようなパターンの場合

    Postクラスで$authorがreadonly。だけどそのあと’Bar’で更新できちゃう。
    16行目の後echo $post->author->username;で呼び出すと確かにBarになってますね。
    readonly自体はよく使いそうな感じだがこれはちゃんと知ってないとやらかすことがでてきそう。

    不変性を求めるなら8行目の個所を

    とすると先ほどの’Bar’と表示されていたところは変わらずFooと出力される。

    あとreadonlyは予約キーワードになるので旧バージョンでreadonlyの名前を使っていた場合8.1に上げる際は修正が必要。

    まだまだあるけど今回はここまで。

    About the author

    naito06

    C++やったり、PythonやったりPHPだったり。

    Add Comment

    このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

    By naito06

    最近の投稿

    アーカイブ

    カテゴリー

    タグクラウド

    コーポレートサイト