quo*_*tor 3 php inheritance class
说我有以下内容:
<?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'; }
?>
Run Code Online (Sandbox Code Playgroud)
假设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为self::$table_name- 请注意美元符号.但最好的方法是使用PHP 5.3的静态关键字:
http://php.net/manual/en/language.oop5.late-static-bindings.php
在self从父类的关键字只引用类的静态proparty的定义,所以它是错误在这种情况下,你需要获得静态属性"继承".在这种情况下,关键字"静态"将解析正确的调用者类并正常工作.