子类

时间:2017-04-26 07:14:20

标签: php oop

假设我有一辆车级车---

class Car{
  var $type;

  function func1(){
  }

  function func2(){
  }
}

现在正在扩展此类的类我希望所有这些类都能启动$ type。他们必须做类似的事情 -

class Taxi extends class Car{
  var $type = 'taxi';
}

我怎样才能实现这一目标?抽象类 - 抽象变量?

2 个答案:

答案 0 :(得分:1)

执行此操作的唯一方法是在final构造函数中进行检查:

abstract class Car {

    public $type;

    final public function __construct()
    {
        if ( ! isset($this->type)) {
            throw new RuntimeException(
                sprintf('%s::$type is undefined', __CLASS__)
            );
        }
    }

}

班级应该是抽象的,这很自然,因为它显然必须扩展,但在其他方面并不是必需的。

答案 1 :(得分:0)

首先关闭所有语法错误,你不能用var声明属性,在声明类Taxi时你有语法错误

class Taxi extends Car{
  public $type;
}

我想你想要实现这样的目标。

abstract class AbstractCar
{
    public $type;

    public function __construct()
    {
       $this->type = static::TYPE;
    }
}

class Taxi extends AbstractCar
{
    //const TYPE = 'foobar';
}

$car = new Car; //Fatal Error: Undefined class constant 'TYPE' (uncomment const TYPE = 'foobar';)
echo $car->type;