在PHP中创建一个对象数组

时间:2011-12-09 20:18:55

标签: php oop object

我想知道在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();
    }
}

5 个答案:

答案 0 :(得分:13)

以下任何一项都有效:

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

答案 1 :(得分:2)

试试这个,

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

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

编辑: ClassstdClass

答案 2 :(得分:0)

希望能帮到你

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

答案 3 :(得分:0)

重要提示...

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();
}

答案 4 :(得分:-2)

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

<?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存在。