Скажем, у меня есть следующее:
<?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 () throws 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.)
Что должен делать?