14

PHPでオブジェクトに対して一度に複数のプロパティを設定することは可能ですか? 代わりに:

$object->prop1 = $something;
$object->prop2 = $otherthing;
$object->prop3 = $morethings;

次のようにします。

$object = (object) array(
    'prop1' => $something,
    'prop2' => $otherthing,
    'prop3' => $morethings
);

ただし、オブジェクトを上書きすることはありません

4

7 に答える 7

23

あなたが望むようではありません。しかし、これはループを使用して行うことができます。

$map =  array(
    'prop1' => $something,
    'prop2' => $otherthing,
    'prop3' => $morethings
);

foreach($map as $k => $v)
    $object->$k = $v;

余分な 2 行だけを参照してください。

于 2012-05-03T15:53:36.483 に答える
10

Object Oriented PHP Best Practicesを参照してください。

「セッター関数は $this を返すので、次のようにチェーンできます:」

 $object->setName('Bob')
        ->setHairColor('green')
        ->setAddress('someplace');

ちなみに、これは流暢なインターフェイスとして知られています。

于 2012-05-03T16:04:13.940 に答える
5

しないことをお勧めします。真剣に、しないでください。

あなたのコードは最初の方法ではるかにクリーンであり、意図がより明確であり、将来誰かがあなたのコードを見て「一体何を考えていたのか」と思うほどコードをぼやけていません。

明らかに間違った方法で何かを行うことに固執する場合は、いつでも配列を作成し、それを反復して、ループ内のすべてのプロパティを設定できます。ただし、コードは提供しません。それは悪です。

于 2012-05-03T15:57:39.647 に答える
2

オブジェクトを返すオブジェクトのセッターをいくつか書くことができます。

public function setSomething($something)
{
 $this->something = $something;
 return $this; //this will return the current object
}

次に、次のことができます。

$object->setSomething("something")
       ->setSomethingelse("somethingelse")
       ->setMoreThings("some more things");

__set関数は値を返すことができないため、プロパティごとにセッターを記述する必要があります。

または、単一の関数を設定して、プロパティ => 値の配列を受け入れ、すべてを設定しますか?

public function setProperties($array)
{
  foreach($array as $property => $value)
  {
    $this->{$property} = $value;
  }
  return $this;
}

そして配列を渡します:

$object->setProperties(array('something' => 'someText', 'somethingElse' => 'more text', 'moreThings'=>'a lot more text'));
于 2012-05-03T15:58:14.277 に答える
0

私は実際にこれをしません....しかし、楽しみのために私はします

$object = (object) ($props + (array) $object);

$objects パブリック プロパティで構成される stdClass になるため、その型が失われます。

于 2012-05-03T16:11:05.923 に答える