php - 我们如何将数组传递给php中的对象
问题描述
class A {
public $a;
public $b;
function f1 () {
// Code
}
}
$obj = new A();
$arr = array ("a" => 1, "b" => 2);
foreach ($arr as $name => $value) {
$obj->$name = $value;
}
return $obj;
我无法理解foreach
部分。我们如何将数组作为对象传递并将该数据作为数组获取?
解决方案
你的 foreach 循环的解释:
- 每个循环你都会得到数组的键名和数组元素的值
- 比你在这里设置 $obj 属性 $obj->$name = $value;
- $name 被替换为数组键名,因此它看起来像 $obj->a = $value;
要将数组传递给对象,请使用魔法 setter 方法:
class A {
public $a;
public $b;
public function __set($property, $value) {
if (property_exists($this, $property)) {
$this->$property = $value;
}
return $this;
}
}
$obj = new A();
$arr = array ("a" => 1, "b" => 2);
foreach ($arr as $name => $value) {
$obj->__set($name, $value);
}
所有对象都自动作为数组,因此要将其作为数组取回,您可以直接循环对象:
foreach ($obj as $key => $value) {
print "$key => $value\n";
}
要直接从对象获取完整数组,您可以创建另一种方法来为您执行此操作:
public function getAsArray() {
$arr = array();
foreach ($this as $key => $value) {
$arr[$key] = $value;
}
return $arr;
}
推荐阅读
- python - 在 request.GET 之后保持表单字段上的字段值 - 但也传递其他 kwargs
- python - 为什么sublimetext 3 之后会自动关闭输出窗口
- c++ - typedef 使用不当
- splunk - 在 Splunk 中创建静态表
- javascript - 用图像替换画布上的矩形
- python - 如何在 spacy 中标记新词汇?
- c# - C#在同一对象的无限列表上获取每个索引的对象
- java - 基于java中的属性对具有arraylist作为值的映射进行排序
- mongodb - InvalidPipelineOperator MongoError:无法识别的表达式“$replaceAll”
- python - 通过 Powershell 作为 System32 创建任务