Php 如何将传递到对象构造函数的数组转换为对象';谁的财产?
我应该在课堂上投入什么才能做到这一点Php 如何将传递到对象构造函数的数组转换为对象';谁的财产?,php,Php,我应该在课堂上投入什么才能做到这一点 $data = array( 'a' => 12345, 'b' => 67890, ); $object = new Class($data); echo $object->a; //outputs 12345 echo $object->b; //outputs 67890 Ignacio Vazquez Abrams的回答很好,但我更喜欢一个白名单,您希望允许以这种方式设置属性: foreach(array('attr
$data = array(
'a' => 12345,
'b' => 67890,
);
$object = new Class($data);
echo $object->a; //outputs 12345
echo $object->b; //outputs 67890
Ignacio Vazquez Abrams的回答很好,但我更喜欢一个白名单,您希望允许以这种方式设置属性:
foreach(array('attribute1', 'attribute2') as $attribute_name) {
if(array_key_exists($attribute_name, $data)) {
$this->$attribute_name = $data[$attribute_name];
}
}
这样可以确保未设置任何私有属性
或者,如果您刚刚了解对象语法,则可以执行以下操作:
$object = (object) $data;
$object = $data->a // = 12345
这是将数组强制转换为一个StdClass,Ignacio Vazquez Abrams的回答很好,但我更喜欢一个白名单,其中包含您希望以这种方式设置的属性:
foreach(array('attribute1', 'attribute2') as $attribute_name) {
if(array_key_exists($attribute_name, $data)) {
$this->$attribute_name = $data[$attribute_name];
}
}
这样可以确保未设置任何私有属性
或者,如果您刚刚了解对象语法,则可以执行以下操作:
$object = (object) $data;
$object = $data->a // = 12345
这是将数组强制为一个
StdClass
,这取决于您的用例,也可能是给定解决方案的替代方案:
class A extends ArrayObject {}
这样,数组中的所有属性都可以通过对象表示法和数组表示法访问,例如
$a = new A( array('foo' => 'bar'), 2 ); // the 2 enables object notation
echo $a->foo;
echo $a['foo'];
从类声明中可以看出,实现了许多接口,允许您像使用数组一样使用类:
Class [ <internal:SPL> <iterateable> class ArrayObject
implements IteratorAggregate, Traversable, ArrayAccess, Countable ]
Class[类数组对象
实现IteratorAggregate,可遍历,ArrayAccess,可计数]
它还添加了许多方法来完成阵列访问功能。正如在开始时所说,这在您的用例中可能不可取,例如,当您不希望类的行为类似于数组时。根据您的用例,这也可能是给定解决方案的替代方案:
class A extends ArrayObject {}
这样,数组中的所有属性都可以通过对象表示法和数组表示法访问,例如
$a = new A( array('foo' => 'bar'), 2 ); // the 2 enables object notation
echo $a->foo;
echo $a['foo'];
从类声明中可以看出,实现了许多接口,允许您像使用数组一样使用类:
Class [ <internal:SPL> <iterateable> class ArrayObject
implements IteratorAggregate, Traversable, ArrayAccess, Countable ]
Class[类数组对象
实现IteratorAggregate,可遍历,ArrayAccess,可计数]
它还添加了许多方法来完成阵列访问功能。正如在开始时所说,这在您的用例中可能不可取,例如,当您不希望类的行为像数组时