PHP对象,设置多个属性

ola*_*nod 10 php oop object

是否可以在php中为对象一次设置多个属性?而不是做:

$object->prop1 = $something;
$object->prop2 = $otherthing;
$object->prop3 = $morethings;
Run Code Online (Sandbox Code Playgroud)

做类似的事情:

$object = (object) array(
    'prop1' => $something,
    'prop2' => $otherthing,
    'prop3' => $morethings
);
Run Code Online (Sandbox Code Playgroud)

不覆盖对象.

Shi*_*dim 18

不像你想要的那样.但这可以通过使用循环来完成.

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

foreach($map as $k => $v)
    $object->$k = $v;
Run Code Online (Sandbox Code Playgroud)

仅查看2条额外的线条.

  • 不是多 2 行,而是 **多 50% 行**;如果只有两个属性要设置,那就更糟了。实际上,如果我们不作弊并使用错误预防器 `{` 和 `}`,它是 3 行。 (3认同)
  • @Pacerier我希望你是在拖钓.在实际的用例中,这样的数组可以容纳数百个值.当然,如果你只递2个值,那就是额外的工作,因为它是三行.但是如果使用具有358个值的数组,则此解决方案将保持三行. (2认同)
  • @Pacerier您不能判断哪个用例更频繁地出现。OP的问题是关于设置多个属性的,答案是有效的。他的示例数组具有3个值的事实只是偶然的,应将其视为从2到*的任何值。实现这一目标的答案是正确的,您只是没有看到全局。 (2认同)

Man*_*kis 8

您应该看看面向对象的PHP最佳实践:

"既然setter函数返回$ this,你可以将它们链接起来:"

 $object->setName('Bob')
        ->setHairColor('green')
        ->setAddress('someplace');
Run Code Online (Sandbox Code Playgroud)

顺便提一下,这被称为流畅的界面.

  • 这是完全不同的事情.他正在谈论创建**变量属性的快捷方式**,这与你的答案无关. (3认同)

Mad*_*iha 5

我建议你要这样做。说真的,不要

您的代码在第一种方式中要干净得多,它更清楚您的意图,并且您不会将代码集中到将来某个时候有人会查看您的代码并认为“白痴到底在想什么”的程度?

如果你坚持做一些显然是错误的事情,你总是可以创建一个数组,迭代它并在循环中设置所有属性。不过我不会给你代码。这是邪恶的。

  • 不对。其他语言也有这种语法,它们被誉为**干净的代码**。这取决于您**如何**使用它。 (3认同)