在PHP中创建对象数组

6

我想知道在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]是同一个类的实例吗? - konsolenfreddy
5个回答

17

以下任何一项都是有效的:

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

1
@Knittle - 你说得对。PHP需要更一致的参数排序。 - Byron Whitlock
@Byron Whitlock那是一种观点。然而,如果您查看参数的顺序和函数名称的顺序,您会发现它们按顺序匹配。例如: array_push(x, y) x是数组,y是要推送的项目,因此“array”是第一个单词,“push”是第二个单词。 in_array(x, y) x是要检查是否“在”其中的项目,y是数组。因此,“in”是第一个单词,“array”是第二个单词。 也许这会帮助您更容易地记住,这是我每次都要检查的东西 :) - Augie Gardner

5
试试这个:
$obj = array(new stdClass(), new stdClass())

或者

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

编辑: 将Class更改为stdClass


0

一个重要的提示...

PHP数组的内存分配是指数级的。一个简单的例子:所有的数组条目都适合一个分配了2MB内存的数组中。如果这个内存不再足够所有的数组条目,那么内存分配就会呈指数级扩展,直到达到PHP内存限制。如果在这个例子中数组需要超过2MB,它将扩展到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();
}

-1
希望这对你有所帮助。

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


2
虽然这段代码可能解决了问题,但是加上解释为什么以及如何解决问题的说明会真正有助于提高您的帖子质量。https://stackoverflow.com/help/how-to-answer - haydnD

-3
说实话,我认为你走在了正确的道路上。从你所描述的情况来看,你不仅仅是想要添加数组,而是要将数组转换为对象。
<?php
 $obj = (object) 'ciao';
 echo $obj->scalar;  // outputs 'ciao'
 ?>

PHP对象

编辑:我认为你不能像这样添加一个对象:

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

"new ProjectsList()" 是创建一个类对象的方式。ProjectsList 必须是一个类。代码看起来会更像这样:

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

不过,您需要先确保 ProjectsList 已经存在。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接