命名空间类属性不可用于类方法?

时间:2016-12-21 02:50:17

标签: php namespaces static-methods

我一直在清理一些过时的代码并在我的应用中重构一些内容。我使用名为Game\Player的类创建了名称空间obj。我用use Game\Player\obj as Player;来称呼它。现在,当使用new Player();实例化类时,似乎在构造期间调用的方法之一不允许访问其中一个obj类属性。以下是Player obj的布局:

namespace Game\Player;

class obj{
    public static $uid;
    public static $id;
    public static $chatDefault;
    public static $domain;
    public static $data;
    ...

    public function __construct(){
        global $db, $user;

        // setting up our player data
        $sql = 'SELECT * FROM '.PLAYERS.' WHERE p_uid = '.(int) $user->data['user_id'].' ORDER BY p_last_played DESC LIMIT 1';
        $result = $db->sql_query($sql);
        $row = $db->sql_fetchrow($result);

        self::$uid = $row['p_uid'];
        self::$id = $row['p_id'];
        self::$chatDefault = $row['p_chat_default'];
        self::$data = null;
        ...

        self::populateData();
        ...
    }

    public function populateData(){
        global $db, $user;

        $sqlArray = array(
            'SELECT'    => 'r.*, cr.*',
            'FROM'      => array(
                RESEARCHES => 'r',
                CITY_RESEARCHES    => 'cr',
            ),
            'WHERE'     =>  'cr.cr_research = r.research_id AND cr.cr_user = '.self::$id.' AND cr.cr_domain = '.self::$domain,
        );
        $sql = $db->sql_build_query('SELECT', $sqlArray);
        $result = $db->sql_query($sql);
        while($row = $db->sql_fetchrow($result)){
            self::$data['researches'][] = $row;
        }
    }
}

似乎self::populateData()被执行是因为我从该方法中得到一个错误,指出SQL查询中使用的变量self::$idself::$domain是空的。我假设我试图在某种程度上错误地使用命名空间,但我无法弄清楚我做错了什么。

0 个答案:

没有答案