【问题标题】:Creating an array of objects in PHP在 PHP 中创建对象数组
【发布时间】:2012-01-17 02:01:00
【问题描述】:

我想知道在php中创建对象数组的权利是什么。
我的目标是能够获得这样的数据:

$obj = new MyClass();
echo $obj[0]->parameter; //value1
echo $obj[1]->parameter; //value2

感谢您的宝贵时间。

编辑: 如果我想在课堂上做它应该是这样的?

class MyClass{
    public $property;

    public function __construct() {
        $this->property[] = new ProjectsList();
    }
}

【问题讨论】:

  • $obj[0]$obj[1] 是同一个类的实例吗?

标签: php oop object


【解决方案1】:

以下任何一项都有效:

$myArray = array();
$myArray[] = new Object();
$myArray[1] = new Object();
array_push($myArray, new Object);

【讨论】:

  • @Knittle - 你是对的。 php 需要更一致的参数排序。
  • @Byron Whitlock 这是一种观点。但是,如果您查看参数的顺序和函数名的顺序,您会发现它们是按顺序匹配的。例如:array_push(x, y) x 是 ARRAY,y 是要推送的项目,因此“array”是第一个单词,“push”是第二个单词。 in_array(x, y) x 是要检查的项目,如果它是“in”,y 是 ARRAY。因此“in”是第一个词,“array”是第二个词。也许这会帮助您更容易记住,这是我每次都必须检查的内容:)
【解决方案2】:

试试这个,

$obj = array(new stdClass(), new stdClass())

$obj = array()
$obj[] = new stdClass()
$obj[] = new stdClass()

编辑: ClassstdClass

【讨论】:

    【解决方案3】:

    希望这会有所帮助

    $newArray[] = (object) array();

    【讨论】:

    【解决方案4】:

    一个重要的提示...

    PHP 数组的内存分配是指数级的。一个简单的例子:所有数组条目都适合一个数组,分配 2MB 内存。如果此内存不再足以容纳所有数组条目,则内存分配会以指数方式扩展,直到达到 PHP 内存限制。如果数组需要超过本例中的 2 MB,它将扩展到 4MB、16MB 等。

    在处理对象时,最好使用集合。 PHP 提供了SplObjectStorage。这种集合为其内容分配确切需要的内存。对这个集合的迭代就像使用yield。仅分配迭代中当前对象的内存。除此之外,SplObjectStorage 类只接受对象。应该非常适合您的目的。

    <?php
    declare('strict_types=1');
    namespace Marcel;
    
    $collection = new SplObjectStorage();
    
    $object1 = new stdClass();
    $object2 = new stdClass();
    
    $collection->attach($object1);
    $collection->attach($object2);
    

    上面显示的代码允许更严格的搜索。

    $collection->contains($object1); // returns true
    

    分离物品就像一个护身符。

    $collection->detach($object1);
    $collection->contains($object1); // returns false
    

    迭代适用于非常快的 foreach 循环或 while 循环。

    $collection->rewind();
    foreach ($collection as $object) {
        // yielding works here
    }
    
    $collection->rewind();
    while ($collection->valid()) {
        // yielding also works here automatically
        $collection->next();
    }
    

    【讨论】:

      【解决方案5】:

      老实说,我认为你走在正确的道路上。从听起来你不只是试图添加到数组中,而是将数组转换为对象。

      <?php
       $obj = (object) 'ciao';
       echo $obj->scalar;  // outputs 'ciao'
       ?>
      

      PHP Objects

      编辑:我认为您不能添加这样的对象:

        $this->property[] = new ProjectsList();
      

      “new ProjectsList()”将是您从类创建对象的方式。 ProjectsList 需要是一个类。它看起来更像这样:

         $obj = new ProjectsList;
         $this->property[] = $obj;
      

      您需要先确保 ProjectsList 存在。

      【讨论】:

        猜你喜欢
        • 2013-12-09
        • 1970-01-01
        • 2017-09-27
        • 1970-01-01
        • 2015-05-04
        • 2016-05-11
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        相关资源
        最近更新 更多