在数组声明中实例化类


Instantiating classes inside array declaration

我很抱歉,我曾经涉水过一些PHP,但直到现在还没有真正做过任何事情。

基本上,我有这样的东西:

class MyClass
{
    function _construct($var1, $var2)
    {
        //property assignments
    }
}
function doStuff($array)
{
    //do stuff to $array
}
$myArray = array();
$myVar1 = "foo";
$myVar2 = "bar";
$myVar3 = "test"
$myVar4 = "aaaaa"
//etc...

我要做的是创建一个MyClass的实例并将其存储到$myArray中。我知道我可以做以下事情:

$classInstance = new MyClass($myVar1, $myVar2);
$myArray[] = $classInstance
$anotherInstance = new MyClass($myVar3, $myVar4);
$myArray[] = $anotherInstance
//etc...

这个过程将按顺序执行多次(没有循环)。当我多次执行此操作后,我将执行以下操作:

doStuff($myArray);

在这个函数中,我将使用foreach等进行循环。这会很乏味。我想知道的是,是否有一种方法可以让我做一些像(我知道这不是正确的语法):

$myArray[] = new MyClass($myVar1, $myVar2);
$myArray[] = new MyClass($myVar3, $myVar4);
//etc...
doStuff($myArray);

任何帮助都会很感激。谢谢!

语法$myArray[] = new MyClass($myVar3, $myVar4);已经有效。你可以完全按照自己的想法去做:

$arr = array();
$arr[] = new stdClass;
$arr[] = new stdClass;
$arr[] = new stdClass;
$arr[] = new stdClass;
$arr[] = new stdClass;
var_dump($arr);
array(5) {
  [0]=>
  object(stdClass)#1 (0) {
  }
  [1]=>
  object(stdClass)#2 (0) {
  }
  [2]=>
  object(stdClass)#3 (0) {
  }
  [3]=>
  object(stdClass)#4 (0) {
  }
  [4]=>
  object(stdClass)#5 (0) {
  }
}
$myArray = array(
    new MyClass('foo', 'bar'),
    new MyClass('test', 'aaaaa')
);