假设我有一辆车级车---
class Car{
var $type;
function func1(){
}
function func2(){
}
}
现在正在扩展此类的类我希望所有这些类都能启动$ type。他们必须做类似的事情 -
class Taxi extends class Car{
var $type = 'taxi';
}
我怎样才能实现这一目标?抽象类 - 抽象变量?
答案 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;