我一直在清理一些过时的代码并在我的应用中重构一些内容。我使用名为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::$id
和self::$domain
是空的。我假设我试图在某种程度上错误地使用命名空间,但我无法弄清楚我做错了什么。