【问题标题】:Object created inside foreach loop在 foreach 循环中创建的对象
【发布时间】:2015-01-30 18:17:58
【问题描述】:

我正在 foreach 循环中创建一个新对象,但我真的不知道如何调用特定对象,因为它们都具有相同的名称。

这是课程:

class Item{
    public static $allItems = array();
    public $slot;
    public $id;

    public function __construct($slot, $id){
        self::$allItems[] = $this;
        $this->slot = $slot;
        $this->id = $id;
    }
}

这是 foreach 循环:

foreach($item_type as $key => $type){
        $itemID = $_SESSION[$type.'ID'];
        $item = new Item($key, $itemID);
    }

有没有办法以不同的方式命名它们或调用特定的实例?

【问题讨论】:

  • 是的,您可以,在 PHP 调用 complex variables 中有一种方式,这种方式允许您在运行时命名变量,例如,当您使用 user-id 为每个用户创建变量时,就像这样 {'user' . $userid}并使用{} 调用此变量

标签: php object foreach


【解决方案1】:

为什么不创建一个带有对象的关联数组并将它们作为数组元素访问:

$elementsArray = array();

foreach($item_type as $key => $type){
    $itemID = $_SESSION[$type.'ID'];
    $elementsArray[$key] = new Item($key, $itemID);
}

然后您可以通过(假设$key 是一个数字)访问它们中的任何一个:

$elementsArray[0] 

【讨论】:

  • 所以不是在对象内部使用数组,而是应该创建一个对象数组?然后我不需要以下属性: public static $allItems = array(); ?
  • 你没有。而且你不应该在Item 中保留Item 的实例,因为每个集合中的每个项目都会在里面有另一个集合,依此类推,以此类推,你将以无限循环结束
  • 好吧不知道。谢谢你的回答:)
  • 不幸的是,在 php 中,您需要先将数组中的值分配给新变量,然后再访问它。所以$tempVar = $elementsArray[0]; $propertyVal = $tempVar->id
【解决方案2】:

你可以简单地让 $item 包含一个数组。

$item = array();

foreach($item_type as $key => $type)
{
  $itemID = $_SESSION[$type.'ID'];
  $item[$itemID] = new Item($key, $itemID);
}

【讨论】:

    猜你喜欢
    • 2013-06-10
    • 1970-01-01
    • 2019-07-31
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 2015-02-04
    相关资源
    最近更新 更多