Эта ошибка не имеет ничего общего с массивами, это ошибка поднятия класса (функция?), Которая исправляется путем перемещения определения класса над вызовом на new Car
. Очевидно, PHP не отображает определения классов, если они реализуют интерфейс .
Вот минимальный пример этого явления.
Работает:
new Foo();
class Foo {}
interface Bar {}
не
new Foo(); # <-- error: Class 'Foo' not found
class Foo implements Bar {}
interface Bar {}
Возможно, это кандидат на PHP Sadness ?
Вот рабочая версия вашего кода, которая также обращается к случайному ключевому слову public
в строке 1:
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
)
)
Попробуйте!