WordPress PHP 扩展 类 参考 'Wrong' 静态变量
WordPress PHP Extended Classes Refer to 'Wrong' Static Variables
我有一个 WordPress 插件,有 2 个扩展 classes,Area 和 Loc,每个都有一个辅助函数 Get。每个 class 都有 table_name 的静态变量。如果我直接调用 Loc::Get($id) ,它会按预期工作。但是,如果我从 Area 调用 Loc::Get($id),它会使用 Area 而不是 Location 的 table_name。
谁能解释一下如何纠正这个问题?此致,
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"
我认为你的问题是你 运行 非静态方法 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));
第一个
函数 Get 不是定义为静态的
function Get($id) {
第二个
$area
未定义
我有一个 WordPress 插件,有 2 个扩展 classes,Area 和 Loc,每个都有一个辅助函数 Get。每个 class 都有 table_name 的静态变量。如果我直接调用 Loc::Get($id) ,它会按预期工作。但是,如果我从 Area 调用 Loc::Get($id),它会使用 Area 而不是 Location 的 table_name。
谁能解释一下如何纠正这个问题?此致,
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"
我认为你的问题是你 运行 非静态方法 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));
第一个
函数 Get 不是定义为静态的
function Get($id) {
第二个
$area
未定义