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 未定义