目次
- 概要
- PHP8.2 新機能3選
- おまけ
- 最後に
概要
今回のスキルアップのため不定期で30分でインプットしたことを投稿の
第五弾として、PHP8.2 新機能についてやっていこうと思います!
未経験からエンジニア転職を目指し、2021年10月頃から本格的にプログラミングに触れ、2021年11月頃からPHPを触り始めたので、
2021年11月25日のPHP 8.1と今回のPHP8.2へのバージョンアップで2回目のバージョンアップを経験することになりますが、
PHP8.1の頃はバージョンアップしたことも知らなかったので実質初めてのバージョンアップで楽しみです!
今回はPHP8.2の新機能の中から30分以内でインプットできる内容から3つ選んでご紹介しようと思います。
第四弾は、Enum(列挙型)とは?について投稿したのでよければ確認してみてください👀
PHP8.2 新機能3選
1. Deprecate dynamic properties
今までは可能だったクラス内に定義していないプロパティに値を代入することが、
これからはクラス内に定義したプロパティでないと値を代入できなくなるというものみたい。
変更点をコードで見てみる
class Cars
{
public string $toyota;
}
$cars = new Class;
// OK!
$cars->toyota = 'RAV4';
// E_DEPRECATEが出るが、プロパティは作成される。
$cars->subaru = 'OUTBACK';
今まで定義していないプロパティに値を代入したことがなかったけど、これはプロパティを定義し忘れていた場合に使っていたとかなのかな?🤔
あまり定義していないプロパティの使い方がわかっていないから、タイポに反応するようになって便利な気がする!
動的プロパティを使いたい場合
もし今までどおり、クラス内に定義していないプロパティを生やしたい場合(動的プロパティ)は、stdClass
をextends
して
プロパティを生やせば使えるみたい。
あとクラスにアトリビュート#[\AllowDynamicProperties]
を付与すればプロパティの生成が可能。
class Cars extends stdClass
{
public string $toyota;
}
#[\AllowDynamicProperties]
class Cars
{
public string $toyota;
}
$cars = new Class;
// 上記2つのクラスどちらもOK!
$cars->subaru = 'OUTBACK';
2. Readonly classes
readonlyプロパティがPHP8.1で実装されましたが、それがクラスにも使えるようになるようです。
変更点をまとめると、
- readonlyをクラスに適応させると、プロパティも全てreadonlyになる。
- readonlyプロパティ同様に、プロパティへの書き込み不可。
- 動的プロパティの作成不可。
- プロパティへの型指定が必須。
- staticなプロパティも不可。
-
#[\AllowDynamicProperties]
も不可。
変更点をコードで見てみる
readonly class Cars
{
public function __construct(
public string $toyota;
) {
}
}
$cars = new Cars('RAV4');
3. Constants in Traits
トレイト内で定数を定義できるようになったみたい👀
変更点をコードで見てみる
trait Bar
{
//プロパティを定義できるようになった
public const A = 'A';
protected const B = 'B';
private const C = 'C'
public function foo()
{
}
}
正直traitをあまり使ったことがないので、この変更がどう影響してくるのか理解できていないので、
もう少し深掘りして調べてみます!📝
すごいわかりやすい説明できる方がいらっしゃれば,お待ちしています🙇♂️笑笑
おまけ
先日記事にしたenum(列挙型)についての新機能があったので、おまけとして載せておきます。
Fetch properties of enums in const expressions
定数式の中でEnumのプロパティ(->name)が取得できるようになったみたい。
変更点をコードで見てみる
<?php
declare(strict_types=1);
enum BackedPrefecture: string
{
case AICHI = "愛知県";
case SHIZUOKA = "静岡県";
case MIE = "三重県";
}
const Location = BackedPrefecture::AICHI->name;
これも変更も正直どう影響してくるのか理解できてません🤣
今使えるじゃん!という場面にこれから出会ったときのために、ここに残しておきます笑笑
最後に
PHPは自由度が高く初学者もとっつきやすい面や世界中にユーザーがいることなどをきっかけに学び始めましたが、様々な型の導入や動的プロパティの禁止など、ルールが厳格化してきている感じがしています。
かといって、型指定をしないでも動くので初学者にも学びやすい面は残っていると思いました。
プログラマーの実力によってコードの質が大きく変わってくる言語という認識を持って、コードの質を上げて読みやすいコードを意識してこれからも学んでいきたいと思います!