【发布时间】:2011-06-06 21:38:25
【问题描述】:
假设我有以下内容:
<?php
abstract class MyParent
{
public static $table_name;
public static get_all(){
return query("SELECT * FROM {$this->table_name}");
}
public static get_all2(){
return query("SELECT * FROM ".self::table_name);
}
}
class Child extends MyParent
{ public static $table_name = 'child'; }
?>
假设query 被正确定义,这些方法都没有我想要的:get_all() 抛出Fatal error: Using $this when not in object context in /path/to/foo.php on line xx 因为$this 是一个实例变量。
get_all2() 会抛出 Fatal error: Undefined class constant 'table_name' in /path/to/foo.php on line xx,因为 self 是静态确定的。
似乎这种事情就是继承的全部意义,所以至少应该很容易,如果不是优雅的话。 (这毕竟是 PHP。)
我应该做什么?
【问题讨论】:
-
为什么两个答案都以
self::$table_name开头,而这不起作用?奇怪!至少他们最终说要使用后期静态绑定。
标签: php class inheritance