我有一个WordPress插件,带有2个扩展类,Area和Loc,每个都有一个辅助函数Get。每个类都有table_name的静态变量。如果我直接调用Loc :: Get($ id),它会按预期工作。但是,如果我从Area调用Loc :: Get($ id),它将使用Area中的table_name而不是Location。
任何人都可以解释如何纠正这个问题?问候,
class _Base {
function Get($id) {
$instance = new self();
$sql = "SELECT * FROM " . static::$table_name . " WHERE id=$id";
return $sql;
}
}
class Area extends _Base {
static $table_name = "Area";
function getLoc($id) {
$sql = Loc::Get($id);
return $sql;
}
}
class Loc extends _Base {
static $table_name = "Loc";
}
$sql = Area::Get(1); // -> "SELECT * FROM **Area** WHERE id=1"
$sql = Loc::Get(1); // -> "SELECT * FROM **Loc** WHERE id=1"
$sql = $area->GetLoc(1); // -> "SELECT * FROM **Area** WHERE id=1"
答案 0 :(得分:1)
我认为你的问题是你运行非静态方法Get
作为静态。当我改变它然后所有开始工作正常。请尝试下面的代码:
<?php
class _Base {
static function Get($id) {
$instance = new self();
$sql = "SELECT * FROM " . static::$table_name . " WHERE id=$id";
return $sql;
}
}
class Area extends _Base {
static $table_name = "Area";
function getLoc($id) {
return Loc::Get($id);
}
}
class Loc extends _Base {
static $table_name = "Loc";
}
var_dump(Area::Get(1));
var_dump(Loc::Get(1));
var_dump((new Area)->getLoc(1));
答案 1 :(得分:0)
第一
根据定义,函数Get不是静态的
function Get($id) {
第二
$area
未定义