如何使用php

时间:2018-11-19 22:31:15

标签: php arrays oop object

我想要一个包含对象的数组。例如。

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 :(得分: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
        )

)

Try it!