SHOEISHA iD

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

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

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

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

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

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

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

 最後に、データベースドライバに関する強化・変更点について紹介します。

PDOドライバのサブクラス化

 PHP 8.4では、PDOドライバがデータベースごとにサブクラス化されるようになり、DB固有の機能を呼び出すことが可能になりました。ファクトリメソッドconnectにより、PDOドライバの共通機能を利用しつつ、データベース固有の機能を利用することが容易になります。以下のサブクラスが利用可能です。

  • SQLite:PdoSqliteクラス
  • MySQL:PdoMySqlクラス
  • PostgreSQL:PdoPgsqlクラス
  • Oracle:PdoOciクラス
  • ODBC:PdoOdbcクラス
  • その他:PdoDblibクラス、PdoFirebirdクラス

 PHP 8.4.1の時点では、クラス独自にメソッドや定数が実装されているのは、冒頭の3つ(SQLite、MySQL、PostgreSQL)のみです。

リスト pdo_subclass.php
// SQLiteでDB構築後に利用可能
$pdoSQLite = new PdoSqlite('sqlite:sqlite3.db');
$callback = …コールバック関数の定義…
// SQLite独自メソッド:COLLATE句に使う関数collに$callbackを設定する
$pdoSQLite->createCollation('coll', $callback);

// MySQLでDB構築後に利用可能
$pdoMySQL = new PdoMySql('mysql:host=localhost;dbname=mydb');
// MySQL独自メソッド:直近のCRUD操作の間に発生した警告の数を返す
$pdoMySQL->getWarningCount();

// PostgresでDB構築後に利用可能
$pdoPgsql = new PdoPgsql('pgsql:host=localhost;dbname=mydb');
// PostgreSQL独自メソッド:プロセスIDを取得する
$pdoPgsql->getPid();

 PDOクラスで、コンストラクタ引数に与えるDSN(Data Source Name)によって、自動的に使用するサブクラスを決定することもできるのは従来どおりですが、新たにファクトリメソッドconnectを使うことができるようになりました。

リスト pdo_subclass.php
$dsn = 'sqlite:sqlite3.db';				// SQLiteの場合
$pdo = new PDO($dsn);					// PDOはこれまでと同じ
$pdo = PDO::connect($dsn);				// ファクトリメソッド

 PDOクラスのコンストラクタではPDOクラスのインスタンスが返されますが、connectメソッドではサブクラスのインスタンスが返されます。前者ではDB固有の機能は使えませんが、後者では可能です。

SQLドライバごとのパーサ

 PHP 8.4では、データベースドライバごとにSQLパーサが実装されました。デフォルトのパーサと各データベースドライバは、表に挙げる機能をサポートします。

表2 各SQLパーサが備える機能
データベース 機能
デフォルトパーサ
  • シングルクオートやダブルクオートで囲まれたリテラルでのクオートの二重化によるエスケープ
  • 2つのハイフン(--)とネストされていないCスタイルのコメント
PDO_MYSQL
  • シングルクオートやダブルクオートで囲まれたリテラルでのクオートの二重化やバックスラッシュによるエスケープ
  • バッククオートで囲まれたリテラルでのクオートの二重化によるエスケープ
  • 1つの空白が続く2つのハイフン(-- )、ネストされていないCスタイルのコメント、#によるコメント
PDO_PGSQL
  • シングルクオートやダブルクオートで囲まれたリテラルでのクオートの二重化によるエスケープ
  • Cスタイルのエスケープ文字列リテラル(Estring
  • ドル($)で囲まれた文字列リテラル
  • 2つのハイフン(--)とネストされていないCスタイルのコメント
  • ?演算子のエスケープシーケンスとしての??のサポート
PDO_SQLITE
  • シングルクオート、ダブルクオート、バッククオートで囲まれたリテラルでのクオートの二重化によるエスケープ
  • 識別子のブラケット([])によるクオート
  • 2つのハイフン(--)とネストされていないCスタイルのコメント

まとめ

 今回は、PHP 8.4の新機能のうち、クラス定義や言語仕様、データベース関連の強化ポイントを紹介しました。次回は、DOMの処理を目的とした機能や、関数と処理系の強化・改良ポイントを紹介します。

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

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
ますます便利になる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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー