SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ますます便利になるPHPの新機能を探ろう!

より使いやすくなったPHP 8.4の新機能──クラス定義や言語仕様とデータベース関連の強化ポイント

ますます便利になるPHPの新機能を探ろう! 第5回

言語仕様での機能強化と変更

 続けて、言語仕様における機能強化と変更について紹介します。

非推奨属性(#[\Deprecated])

 PHP 8.4では、ユーザ定義の関数、メソッド、クラス定数について、それが廃止対象であることを明示できるようになりました。非推奨としたい関数などの定義の前に#[\Deprecated]属性を置くことで、非推奨としてマークされます。

リスト deprecated.php
#[\Deprecated]			// 非推奨をマーク
function d_func() {
    return 'この関数は廃止されました';
}
#[\Deprecated("Use newfunc() instead", since: "3.1")]	// メッセージ付き
function d_func2() {
    return 'この関数も3.1で廃止されました';
}
print d_func() . "\n";	// Deprecated: Function d_func() is deprecated 
print d_func2() . "\n";	// Deprecated: Function d_func2() is deprecated since 3.1, Use newfunc() instead 

 このように、関数などを非推奨にマークできるほか、バージョンの明記や追加メッセージも指定できます。

newからのカッコなしのメソッドチェーン

 PHP 8.4では、newによるインスタンス化からすぐにメソッドチェーンでメソッドを呼び出したい場合、優先順位を明示するカッコが不要になりました。従来は、以下のようにカッコで囲って優先順位を明示する必要がありました。

リスト method_chain.php
print (new Ramen())->serve() . "\n";	// < PHP 8.4

 newを使う場合、優先順位の解釈に曖昧さは生じないため、PHP 8.4ではこのカッコが以下の通り不要になりました。

リスト method_chain.php
print new Ramen()->serve() . "\n";	// PHP 8.4

 カッコが重なると見にくいですし、微々ながらもタイプ量も増えますから、細かな改良ですがうれしいですね。

暗黙のnullable型の非推奨化

 PHP 8.4では、関数の引数に型が指定されている場合、デフォルト値としてnullを指定すること(暗黙のnullable型)が非推奨となりました。従来は、こういったケースではnullの代入も可能でした。これを正して、型が指定されている場合にはnullをデフォルト値として設定することは非推奨となります。

リスト deprecate_nullable.php
function func(int $a = null) {	// 特に警告なし(< PHP 8.4)
}
// Deprecated: func(): Implicitly marking parameter $a as nullable is deprecated, the explicit nullable type must be used instead (PHP 8.4)

 PHP 8.4では、このように暗黙のnullable型は非推奨となり、明示的なnullable型(この場合は?int)が必要と警告されます。PHP 9.0では完全にエラーとなる予定です。

0のマイナス乗の動作変更

 PHP 8.4では、0を負数でべき乗したときにエラーになります。従来は、無限大(float(INF))が演算結果となっていました。負数によるべき乗は、実際には以下のような演算になります(**はべき乗の演算子です)。つまり、逆数をとって、絶対値によるべき乗になります。

x ** -y ➡ 1/x ** y

 xが0の場合、1/xは除算エラーになるので、この時点でゼロ除算エラーとするのが今回の変更です。演算結果としては従来通りfloat(INF)が返りますが、Deprecatedのエラーとなります。

リスト negative_power.php
var_dump(0 ** -1);	// float(INF)
// Deprecated: Power of base 0 and negative exponent is deprecated (PHP 8.4)

 なお、PHP 9.0では完全にDivisionByZeroErrorエラーとすることになっています。

次のページ
データベース関連の機能強化

この記事は参考になりましたか?

ますます便利になるPHPの新機能を探ろう!連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 山内 直(WINGSプロジェクト ヤマウチ ナオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。出版社を経てフリーランスとして独立。ライター、エディター、デベロッパー、講師業に従事。屋号は「たまデジ。」。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/20665 2024/12/25 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー