PHP で空の値からデフォルトオブジェクトを作成する
PHP でオブジェクトを作成し、creating default object from empty value というエラーを解決するためのいくつかの方法を紹介します。
PHP で stdClass() オブジェクトを作成する
オブジェクトを初期化せずにオブジェクトのプロパティを割り当てようとすると、エラーがスローされます。エラーは creating default object from empty value と表示されます。エラーは、php.ini ファイルの構成によっても異なります。構成でエラーが抑制されている場合、そのようなスクリプトはエラーをスローしません。設定ファイルを変更してエラーを抑制し、それを取り除くことはお勧めできません。代わりに、stdClass() オブジェクトを作成してエラーを取り除くことができます。グローバル名前空間で stdClass() のオブジェクトとして変数を宣言すると、オブジェクトにプロパティを動的に割り当てることができます。
たとえば、変数 $obj を作成し、それを NULL に設定します。次に、$obj オブジェクトを使用して success プロパティを false に設定します。この場合、出力セクションに示されているように、エラーがスローされます。これは、$obj がオブジェクトとして初期化されていないためです。
サンプルコード:
$obj = NULL;
$obj->success = true;
出力:
Warning: Creating default object from empty value
エラーを解消するには、まず、$obj 変数に stdClass() のインスタンスを割り当てます。次に、$obj を使用して success プロパティを true に設定します。次に、print_r() 関数を使用して $obj オブジェクトを出力します。isset() 関数を使用して、$obj がすでに存在するかどうかを確認することをお勧めします。$obj に関する情報は出力セクションで確認できます。したがって、stdClass() のオブジェクトを作成することでエラーを排除できます。
サンプルコード:
$obj = new stdClass();
$obj->success =true;
print_r($obj);
出力:
stdClass Object ( [success] => 1 )
PHP のオブジェクトへの Typecast 配列
配列の前に object キーワードを使用して、配列をオブジェクトに型キャストできます。このようにして、オブジェクトを作成できます。次に、プロパティをオブジェクトに割り当てることができます。オブジェクトはすでに初期化されているため、オブジェクトのプロパティの割り当て中にエラーはスローされません。このメソッドは、stdClass() クラスのオブジェクトも作成します。
たとえば、変数 $obj を作成し、それを array() 関数に割り当てます。次に、array() の前に括弧で囲んだ object キーワードを記述します。配列はオブジェクトに変換されました。次に、$obj を使用して true 値を success プロパティに割り当てます。最後に、print_r() 関数を使用してオブジェクトを出力します。このようにして、配列を型キャストするオブジェクトを作成し、エラーを取り除くことができます。
サンプルコード:
$obj = (object)array();
$obj->success =true;
print_r($obj);
出力:
stdClass Object ( [success] => 1 )
PHP で匿名クラスからオブジェクトを作成する
PHP の匿名クラスからオブジェクトを作成し、それにプロパティを割り当てることができます。new class キーワードを使用して、匿名クラスを作成できます。ジェネリッククラスと同様に、プロパティの値を設定できます。プロパティにはクラスがあり、オブジェクトを使用してアクセスできるため、エラーはスローされません。
たとえば、オブジェクト $obj を作成し、new class キーワードを使用して匿名クラスをオブジェクトに割り当てます。次に、public プロパティ $success を作成し、値を true に設定します。クラスの外では、print_r() 関数を使用してオブジェクトを出力します。このようにして、PHP の匿名クラスからオブジェクトを作成し、エラーを防ぐことができます。
サンプルコード:
$obj = new class {
public $success = true;
};
print_r($obj);
出力:
class@anonymous Object ( [success] => 1 )
Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.
LinkedIn