Как создать массив с объектами в php - PullRequest
0 голосов
/ 20 ноября 2018

Я хочу иметь массив с объектами. Например.

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. Я не могу добавить объекты в массив. Почему это так?

1 Ответ

0 голосов
/ 20 ноября 2018

Эта ошибка не имеет ничего общего с массивами, это ошибка поднятия класса (функция?), Которая исправляется путем перемещения определения класса над вызовом на 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
        )

)

Попробуйте!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...