WordPress PHP扩展类请参阅“错误的”静态变量

时间:2015-06-14 15:29:26

标签: php wordpress static extends

我有一个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"

2 个答案:

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