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