我有一个父类和许多子类.子类中有一个静态变量,父类中有一个静态方法.我需要调用子类继承的静态方法,获取子类的中定义的静态变量.执行代码后系统提示Access to undeclared static property: model::$table
他在查找model::$table,也就是说他查找的是父类中的$table变量.可是我的$table是在子类中定义的,同时我是调用的子类的get_table()方法.为什么他不查找child_model::$table.还有就是父类中许多地方要用到子类中定义的$table方法.在父类中使用self::$table后.在执行子类中继承的方法 ,也是无法访问子类中定义的静态变量的.怎么解决啊?
class model{
//获取子类中定义的静态变量
public static function get_table()
{
return self::$table;
}
//实例化子类后使用子类中定义的静态变量
somefunction(){
echo(self::$table);
}
}//子类
class child_model extends model{
public static $table = 'some_table';
}//调用子类继承的静态方法
echo chile_model::get_table();
//实例化子类后使用子类中的静态变量
$cm = new child_model();
$cm -> somefunction();
他在查找model::$table,也就是说他查找的是父类中的$table变量.可是我的$table是在子类中定义的,同时我是调用的子类的get_table()方法.为什么他不查找child_model::$table.还有就是父类中许多地方要用到子类中定义的$table方法.在父类中使用self::$table后.在执行子类中继承的方法 ,也是无法访问子类中定义的静态变量的.怎么解决啊?
class model{
//获取子类中定义的静态变量
public static function get_table()
{
return self::$table;
}
//实例化子类后使用子类中定义的静态变量
somefunction(){
echo(self::$table);
}
}//子类
class child_model extends model{
public static $table = 'some_table';
}//调用子类继承的静态方法
echo chile_model::get_table();
//实例化子类后使用子类中的静态变量
$cm = new child_model();
$cm -> somefunction();
class model {
public static function get_table(){
return static::$table;
}
public function somefunction(){
echo(static::$table);
}
}class child_model extends model{
public static $table = 'some_table';
}echo child_model::get_table();
$cm = new child_model();
$cm->somefunction();
这个self在程序未执行前,就被PHP解释器替换绑定为了当前类,也就是父类 model了。
#1的办法可以解决你的问题,需要注意的是你的PHP版本要在5.3之后
$this ->table
这个变量,再把table改成静态变量以后,就无法访问$this_table了这个怎么解决呢
换句话说就是希望子类的静态变量$table 在子类实例化以后,父类方法中可以访问$this->table
我尝试过吧子类的$table改成$table2 然后父类定义方法
报错:Fatal error: Cannot access empty property in D:\web\htdocs\soufun\index.php on line 15
class model{
public $table;
public function __construct()
{
$table = static::$table2;
}
//获取子类中定义的静态变量
public static function get_table()
{
return static::$table2;
}
//实例化子类后使用子类中定义的静态变量
function somefunction(){
//注意这里,希望原来父类使用$this->table的地方继续有用
echo($this -> $table);
}
}
//子类
class chile_model extends model{
public static $table2 = 'some_table';
}
//调用子类继承的静态方法
echo chile_model::get_table();
//实例化子类后使用子类中的静态变量
$cm = new chile_model();
$cm -> somefunction();
$table = static::$table2;
这个 $table 只是函数内的局部变量,访问类属性$table应该用 $this->table
注意了,不是 $this->$table
$cm = new chile_model();
$cm -> somefunction();
somefunction还是没法输出$table,无论是echo($this -> table);还是echo($table);都不行.难道必须用echo(static::$table2);??
怎样才能把静态变量$table2的值赋给$table?
public $table;
public function __construct()
{
// 这里
$this->table = static::$table2;
}
public static function get_table()
{
return static::$table2;
}
function somefunction(){ // 没有那个 $
echo($this -> table);
}
}
//子类
class chile_model extends model{
public static $table2 = 'some_table';
}还是建议你能完成的看一遍手册先