PHP 抽象属性
2022-08-30 06:50:25
有没有办法在PHP中定义抽象类属性?
abstract class Foo_Abstract {
abstract public $tablename;
}
class Foo extends Foo_Abstract {
//Foo must 'implement' $property
public $tablename = 'users';
}
有没有办法在PHP中定义抽象类属性?
abstract class Foo_Abstract {
abstract public $tablename;
}
class Foo extends Foo_Abstract {
//Foo must 'implement' $property
public $tablename = 'users';
}
没有定义属性这样的事情。
只能声明属性,因为它们是初始化时保留在内存中的数据的容器。
另一方面,函数可以在不定义(缺少函数体)的情况下声明(类型,名称,参数),因此可以抽象。
“抽象”仅表示某些内容已声明但未定义,因此在使用它之前,您需要定义它,否则它将变得无用。
不,没有办法使用编译器强制执行,您必须对变量使用运行时检查(例如,在构造函数中),例如:$tablename
class Foo_Abstract {
public final function __construct(/*whatever*/) {
if(!isset($this->tablename))
throw new LogicException(get_class($this) . ' must have a $tablename');
}
}
要对所有派生类Foo_Abstract强制执行此命令,您必须Foo_Abstract构造函数,以防止重写。final
你可以声明一个抽象的 getter 来代替:
abstract class Foo_Abstract {
abstract public function get_tablename();
}
class Foo extends Foo_Abstract {
protected $tablename = 'tablename';
public function get_tablename() {
return $this->tablename;
}
}