如何定义PHP抽象属性?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

有什么方法可以在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;
  }
}

扫码关注云+社区