PHP

PHP

【PHP】if文のベンチマーク

以前、if文、参考演算子、switch文、match式についてのベンチマークをしましたが、今回はif文の書き方に特化したベンチマークテストを実施してみます。if文の書き方3種類と、else + 入れ子、elseif、else ifの違いについてなど、複数のテストケースでベンチマークテストを実施してみます。
PHP

【PHP】JSONフォーマッターは簡単に作れるよ

APIやMCPサーバーを叩いて返ってきたJSONを整形表示させたい場面は多いと思いますが、JSONを人間にとって見やすい状態に整形するツールJSONフォーマッターをPHPで実装して、CLIでも使えるようにしようという企画です。
PHP

【PHP】配列ループのベンチマーク

PHPでの配列ループ処理何通りかについてベンチマークテストを実施してみました。対象のループ処理は、for文、foreach文、while文、array_map()関数などなどです。対象のPHPバージョンは、8.2 / 8.3 / 8.4 です。
PHP

【PHP】プリペアドステートメントのバインド用配列には気を付けよう

やらかしてしまったので、繰り返さないよう戒めとして記しておきます。当然のこととは思いますが、PHPでSQLのプリペアドステートメントに値をバインドするために配列を渡す際には注意が必要です。
PHP

【PHPUnit】TestRunner拡張で前処理と後処理を追加

PHPUnit12 / 11 のTestRunnerを拡張して、テスト実行時の全体の前処理と後処理を追加していきます。(制作協力:ChatGPT-4o)※PHPUnitの公式ドキュメントだけでは判りにくかったため、ChatGPTに手伝ってもらいました。が、ハルシネーションとの闘いですよね。。嘘ついたり汚いコード提示してきたり、コーディング規約無視したり。その辺は人間と同じだなあと思ったり。。
PHP

【PHPUnit】HTTPテストのTestCaseを作ってみる

フレームワークや外部ライブラリ禁止でもPHPUnitはOKというプロジェクト用に、LaravelのようなHTTPテストができるTestCaseクラスを作ってみます。
PHP

【PHPUnit】カバレッジの除外設定

PHPUnit12/11でカバレッジの対象から特定のファイルやディレクトリを除外する設定のメモです。
PHP

【PHP】PDOを使ってPaginatorを作ってみる

フレームワークや外部ライブラリ禁止のプロジェクトで、Laravelのページネーション paginate(5) のような機能を作ってみるという案件です。
PHP

【PHP】動的プロパティをエラーが出ないように扱ってみる

PHP8.2.0以降で動的プロパティは非推奨となり、error_reporting(E_ALL) とすると、存在しないクラスプロパティへの値代入は実行されますが、エラー出力されます。意図しないプロパティへの値代入はバグの温床になるので、クラスプロパティは明示的に宣言してくださいとうことでしょう。しかしながら、この動的プロパティを敢えて使いたい場面もあったります。例えば、ModelBaseで取得結果をDTOで返したい場合などは、当然テーブル毎にカラム定義が異なるので、いちいちテーブル毎のDTOを事前に宣言しておくというのは現実的ではありません(いや、やりたくありません)。PDOStatementで fetch したレコードのカラム名をプロパティ名として、動的プロパティとして値を代入したいものです。というわけで、 error_reporting(E_ALL) でもエラーが出ないように動的プロパティを扱っていきます。
PHP

【PHP】DateTimeオブジェクトをもっと使いやすくしてみる

フレームワークや外部ライブラリ使用禁止のプロジェクトでは、日付計算でCarbonのような超絶便利なものが使えず、PHP組込のDateTimeオブジェクトを使うことになります。これがまた使いにくいので、もう少し使いやすくしてみましょう。