試行錯誤しながらエンジニア(プログラマー)として働く猫のブログ。技術的な話や、働き方の話、読書録とか、試行錯誤している日常の話。7.4の新機能としてクラスのプロパティに型がかけるようになる機能が提案されていました。2.0と呼ばれるもの。日本語に治すとプロパティ型注釈といった感じでしょうか。仕様書は以下の通りです。7.4で入ることが確定のようです。github.com以下、提案書を簡単に日本語で説明したものです。型注釈の導入や、戻り値の型注釈の導入により、PHP7は型システムが非常に強化された。現状クラスのプロパティには型をつけられないので、開発者はgetterやsetterをつかい、その引数や戻り値に型注釈をつけている。ありあまりよろしくない。違い実はプロパティ型注釈自体は提案されたことがある機能である*3。wiki.php.netしかしこのv1の機能は却下されている。v1とv2は何が違うのか。staticプロパティもサポートしている。v1では実装上の問題で含まれていなかったらしい。型注釈されたプロパティの参照渡しにも対応している(詳細は後述)。$y;}callableについてcallableだけは扱いが文脈依存で非常に難しいので対応していません*4。これはcallableが「型のように使えるけど型ではない」性質によるもので、文脈に依存しないcallableが別で提案されています。Callablesというものです。wiki.php.netcallableの代わりにClousureを使うという方法があります。当然ながら親クラスと同じ名前で違う型のプロパティは定義できません。ダメ}トレイトも同様の制限を受けます。みたいなものが導入されると本当にgetter/setterを作る文化はなくなりそうだ。みたいな話が出ている。はやくreadonlyつくってくれ。ここで初めて型エラーになるこれは、クラスとかだとデフォルト値を設定できないから。aをsetしていなかったらここでエラーになるnullableでない型のプロパティをunset仕様としてもエラーになる。Test(42);var_dump($test->val);参照渡し$aryの型が変わらなければこういうことも可能です。Test;sort($test->ary);さいごに他にも細かい仕様がいろいろ書かれていますが、これ以上は知らなくても問題なく書けそう。言えばunsetした場合の挙動が気になったくらい。PHP7.4がリリースされたらぜひ使ってみてください。単行本(ソフトカバー)この商品を含むブログを見る*1:intやstringなどPHP7から新しく引数の型注釈ができるようになった型*2:金型。...2018-10-25PHPのcallableとその呼び方とクラスプロパティについて先日、こんな事件がありました。(2)月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。