我想要一个包含对象的数组。例如。
public $aCarObjects = array();
$aCars = array('Audi','BMW','Ford');
foreach($aCars as $car){
array_push($aCarObjects, new Car($car));
}
// Simplified class
class Car implements C{
private $carName;
public function __construct($carName){
$this->carName = $carName;
}
}
interface C {}
这是我正在尝试的简化版本。 Car
类包含有关汽车的一些信息。
在Interface
类中使用C
Car
时。我无法将对象添加到数组。为什么呢?
答案 0 :(得分:2)
此错误与数组无关,这是一个类提升错误(功能?),该问题已通过将您的类定义移至对new Car
的调用之上而得到修复。显然,PHP does not hoist class definitions if they implement an interface。
这是该现象的最小例子。
作品:
new Foo();
class Foo {}
interface Bar {}
否:
new Foo(); # <-- error: Class 'Foo' not found
class Foo implements Bar {}
interface Bar {}
也许这是PHP Sadness的候选人?
这是您的代码的有效版本,该代码还解决了第1行中的一个杂散public
关键字的情况。
interface C {}
class Car implements C {
private $carName;
public function __construct($carName) {
$this->carName = $carName;
}
}
$aCarObjects = [];
$aCars = ['Audi', 'BMW', 'Ford'];
foreach ($aCars as $car) {
array_push($aCarObjects, new Car($car));
}
print_r($aCarObjects);
输出:
Array
(
[0] => Car Object
(
[carName:Car:private] => Audi
)
[1] => Car Object
(
[carName:Car:private] => BMW
)
[2] => Car Object
(
[carName:Car:private] => Ford
)
)