arn*_*rno 4 php abstract-class abstraction instantiation
abstract class db_table {
static function get_all_rows() {
...
while(...) {
$rows[] = new self();
...
}
return $rows;
}
}
class user extends db_table {
}
$rows = user::get_all_rows();
Run Code Online (Sandbox Code Playgroud)
我想从抽象父类中定义的静态方法创建类的实例,但PHP告诉我"致命错误:无法实例化抽象类......"我应该如何正确实现它?
编辑:当然我想在这种情况下创建类"user"的实例,而不是抽象类的实例.所以我要告诉它创建一个被调用的子类的实例.
Tom*_*igh 10
请参阅手册中的此页面:
的局限性
self::对当前类的静态引用类似于
self::或__CLASS__使用函数所属的类来解析,如在其定义的位置.
使用PHP> = 5.3和后期静态绑定只有一个简单的方法.在PHP 5.3中,这应该工作:
static function get_all_rows() {
$class = get_called_class();
while(...) {
$rows[] = new $class();
...
}
return $rows;
}
Run Code Online (Sandbox Code Playgroud)
http://php.net/manual/en/function.get-called-class.php
小智 7
这对我有用..
abstract class db_table {
static function get_all_rows() {
...
while(...) {
$rows[] = new static();
...
}
return $rows;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4741 次 |
| 最近记录: |