【发布时间】:2013-07-07 03:51:01
【问题描述】:
自从我开始在 OOP 中编写更多代码以来,在我看来,我总是遇到“代码样式”问题。我想向现有对象添加一些额外的数据。当我使用数组时,这很容易通过 foreach 实现,因为每个数组项都有自己的键。现在有了对象,我还没有找到一种方法可以使用密钥访问每个项目。
$data_items = $this->model->get_function();
$data_items = (array) $data_items;
foreach ($data_items as $key => $row)
{
$data_items[$key]['additional_data'] = 'additional_data';
}
$data_items = (object) $data_items;
我认为我的代码只是一种变通方法。请有人告诉我是否可以摆脱代码行“$data_items = (array) $data_items;”和“$data_items = (object) $data_items;”。
感谢所有回答我问题的人!
直到现在我还没有意识到我试图实现的目标如此简单:
foreach ($data_items as $row)
{
$row->additional_data = 'additional_data';
}
【问题讨论】:
-
对象的 ArrayAccess 接口。 php.net/arrayaccess
-
是什么阻止您直接在对象上执行
foreach? -
由于你不是试图在没有魔法的情况下将对象转换为字符串或整数,你可以循环遍历对象
-
php.net/manual/en/control-structures.foreach.php - "foreach 仅适用于数组和对象"
-
oop 很棒,但是使用 php stdclass 对象并没有提供任何 oops 的好处。在 php 中,在存储值的集合时,您应该始终偏爱常规数组而不是 stdclass 对象,这仅仅是因为该语言为数组提供了最好的支持。
标签: php arrays oop object foreach