45

stdClassオブジェクトの属性を1つのステートメントで設定したいと思います。私はそれについて何も知りません。私は次のことを知っています

$obj = new stdClass;
$obj->attr = 'loremipsum';

2つのステートメントが必要です。

$obj = (object) array('attr'=>'loremipsum');

単一のステートメントを取りますが、直接法ではありません。

$obj = new stdClass(array('attr'=>'loremipsum'));

動作していません。

4

3 に答える 3

71
$obj = (object) array(
    'attr'=>'loremipsum'
);

実際、それは得ようとしているのと同じくらい直接的です。カスタム コンストラクターでさえ、単一の式でこれを行うことはできません。

プロパティは内部的にハッシュにも格納されるため、キャストは実際には配列からの単純な変換である可能(object)があります。

次のような基本クラスを作成できます。

abstract class MyObject
{
    public function __construct(array $attributes = array())
    {
        foreach ($attributes as $name => $value) {
            $this->{$name} = $value;
        }
    }
}

class MyWhatever extends MyObject
{
}

$x = new MyWhatever(array(
    'attr' => 'loremipsum',
));

ただし、そうするとコンストラクターがロックされ、各クラスはオーバーライド時に親コンストラクターを呼び出す必要があります。

于 2012-12-07T10:39:54.030 に答える