エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


CakePHP4、5のnewEmptyEntityで作成したオブジェクトは空なのか、確認してみた

      2025/01/31

CakePHP4、5のnewEmptyEntityで作成したオブジェクトは空なのか?

 
CakePHP4系、CakePHP5系で新たにレコードを登録する際、「newEmptyEntity()」を使って空のオブジェクトを作成するかと思います。
 
この作成されたオブジェクトは「空」なのだろうか?と思い確認をしてみることにしました。
 
 
ちなみに、CakePHP4系、CakePHP5系の両方で確認しましたが、当たり前のように同じ結果でした。(CakePHPの処理ではなく、PHPの処理ですからね。)
 
 

$this->Users->newEmptyEntity();」で生成した「$user」は「空」なのか?

 

 
上記は、Bakeして作成した Usersコントローラー内の addアクションです。
上記の 3行目の「$this->Users->newEmptyEntity();」で生成した「$user」は「空」なのか?
 
という確認を行いました。
 
 

「newEmptyEntity」で生成したオブジェクトを「empty」「is_null」などでチェックしてみた

 
具体的なチェックの処理と結果は以下の通りでした。
 

 
上記の中にコメントで結果を書いていますが、いずれも「空」「null」ではない、という結果になっています。
 
$this->Users->newEmptyEntity();」で「空のエンティティ」を作る処理ではあるものの、作成されるものは「空のオブジェクト」であるので、「empty()」などでチェックするとそれは「空」ではないと判断されるということですね。
 
オブジェクトが生成されていますので、空ではないですよね。そりゃそうですよね、と。
 
 

「newEmptyEntity()」が空なのか、明確にしたかった理由

 
「newEmptyEntity()」が空なのか、これまであまり気にしたことがなかったのですが、それを明確にしたかった理由は、以下のように「newEmptyEntity()」で作成した値を引数として別の関数に渡す処理を構築しようとしていたためです。
 
より具体的には、addと editで行う処理を共通化しようと考えたのですが、その際、「newEmptyEntity()」で作成した値を「empty()」でチェックすることができるのだろうか?と疑問に思ったためでした。
 

 
「newEmptyEntity()」で作成した値は、「空」ではないことが明確になりましたので、引数が渡ってきていないときは、「empty()」が「true」になりますので、判別してエラー処理ができることが明確になりました。
 
これで、より不具合が少ないプログラムを組むことができますね。
 
 

想定外の値も想定した処理を構築する必要がある

 
かつて、私にプログラムを教えてくれた先輩がこんなことを言っていました。
「想定外の値が来た場合でもハングアップ(異常終了)しない処理を心がけろ」と。
 
想定外の値が来たときでも異常終了してしまうのではなく、想定外の値が来たとしてログを出力し、適切なエラー処理を実施したうえで、安全に停止するように処理を構築しろ、という意味です。
 
そのため、私が作成するプログラムは、若干エラーチェックがくどすぎると思うこともありますが、最初に教えてくれた方の教えなので、習慣になってしまっているとも言えますね。
 
どれだけの想定外を想定できるかが、いいシステムを構築するためのノウハウだ、ということも言っていましたね。
 
まぁ、どれくらいの信頼性が必要なシステムなのか、にもよりますけどね。
 
 

CakePHP5の関連記事

CakePHPのpostlinkで生成した削除リンクをクリックしても処理が実行されない対処法
CakePHP4、5のユーザ認証でID、PASS以外の削除フラグなども条件加える方法
CakePHP4、CakePHP5系の認証処理でログインの有無の確認、ユーザ情報の取得の方法
CakePHP4、5で$_SERVERと同じようにURIを取得する「getUri()」の紹介
getParam('action')で取得するアクション名は別関数に移動しても不変
CakePHP4系、CakePHP5系のexists()でカラムを指定して値の有無をチェックする方法解説
CakePHP4、5のnewEmptyEntityで作成したオブジェクトは空なのか、確認してみた
CakePHP4、5でSELECT telephone as tel FROM usersの様にasでカラムに別名を付ける方法
CakePHP4、5の認証処理で認証が通らない際の確認方法と確認箇所の紹介
CakePHP5系で認証機能のAuthenticationプラグインをインストール・エラー発生注意
 
その他の「CakePHP5」に関する記事一覧
 
 

 - CakePHP 3.x 4.x 5.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP 2.3でファイルをアップロード・その2 ファイル名を乱数で設定

CakePHPのアップロードするファイル名を乱数で変更しセキュリティを高める方法を解説。

CakePHPのpostlinkで生成した削除リンクをクリックしても処理が実行されない対処法
CakePHPのpostlinkで生成した削除リンクをクリックしても処理が実行されない対処法

CakePHP環境にてpostLinkで生成した削除のリンクをクリックしても処理が実行されず、JavaScriptでUncaught TypeErrorが発生。原因は同一IDを複数記述していることだった。

CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない

CakePHP4でテーブルの数値項目に対してlike句を使用した部分一致検索を実行するとエラーが発生する。クリエービルダーの不具合だと思われ対処方法が分からない。

CakePHP 2.3で saveの便利な使い方・サンプルソース付き

CakePHPのレコードを保存、更新する際に使う Saveを詳細解説します。

CakePHP4で現在処理しているコントローラー名、アクション名を取得する方法
CakePHP4で現在処理しているコントローラー名、アクション名を取得する方法

CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法を解説。複数の方法があるが、getParam()メソッドを使う方法が汎用性があって便利かも。

VirtualBoxにCakePHP3を設置。必要なCentOS、Apache、PHP、MySQL、Composerをインストールし設定する。
VirtualBoxにCakePHP3を設置。必要なCentOS、Apache、PHP、MySQL、Composerをインストールし設定する

VirtualBoxにCentOS、Apache、MySQL、PHPをインストールするところから初めてCakePHP3の開発環境を構築する手順を詳細解説。この記事1つで全ての設定が完了する。

CakePHP3のForm Helperの使い方のまとめ

CakePHP3になりフォームヘルパーの使い方も大きく変わりましたので、使い方をまとめました。基本的な使い方からプラスアルファの便利な使い方まで紹介。

CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説
CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説

CakeDC謹製Usersプラグインの紹介。Usersのカスタマイズとして入力項目のバリデーションの変更を、プラグインのファイルは触らずオーバーライドにより実装する方法を解説する。

CakePHP3のユーザ管理・認証プラグイン CakeDC/Usersの導入・機能解説・3.1.5対応
CakePHP3のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説・3.6以降対応

CakePHP3のユーザ管理プラグイン Usersは、ユーザ登録、メール認証、ログイン認証、ユーザ管理、権限管理、reCAPTCHAなど会員制のサイトを簡単に実現可能。その導入方法、カスタマイズ方法を解説。

CakePHP3でページごとに読み込むJavaScript、CSSを変える処理の解説
CakePHP3でページごとに読み込むJavaScript、CSSを変える処理の解説

CakePHP3でJavaScriptやCSSを編集する基本形から、それらやテンプレート(エレメント)を特定のテンプレートを読み込んだときのみ編集、実行するための方法、ブロック化について解説。