我在stackoverflow上搜索了“当不在对象上下文时使用$ this”,但我无法得到答案,所以我在这里问。
我会在这里复制我的代码,这样你和我就不会感到困惑:
错误在第一个IF语句的此代码中($ this-> checkConnection()):
public function randomLocation() {
if ($this->checkConnection()) {
$fetch = array();
$character = $this->getCharacter($_GET['action']);
$locations = Controller_Core_Database::getObjects('Model_Game_Location');
foreach ($locations as $location) {
$fetchLocation = $location->getLocationNameShort();
$fetch[] = $fetchLocation;
}
$newLocation = rand(0,31);
$character->setLocation($fetch[$newLocation]);
Controller_Core_Database::update($character);
}
}
但是我有很多以'checkConnection'开头的函数,除了这个函数之外还有一些工作。这在我看来很奇怪(虽然我仍然是OOP PHP的初学者)
所以这是我的checkConnection函数:
public function checkConnection() {
$mysqli = Controller_Core_Database::getDB();
if ($mysqli != null) {
return TRUE;
} else {
return FALSE;
}
}
Controller_Core_Database :: getDB()代码是:
public static function getDB() {
self::$mysqli = new mysqli('','','','');
return self::$mysqli;
}
我出于安全目的删除了这些信息 以下是一个功能完美:
的示例public function createItem() {
$view = new Controller_Core_View();
$view->setViewFile("game/createItem.php");
if ($this->checkConnection()) {
$item = Controller_Core_Database::getObjects('Model_Game_Item');
$enchantment = Controller_Core_Database::getObjects('Model_Game_Itemenchantment');
$view->assign("item", $item);
$view->assign("enchantment", $enchantment);
}
return $view->render();
}
我看不出两个有效且无效的功能有什么不同,我希望你能帮助我
答案 0 :(得分:0)
您没有指定,如何调用 randomLocation()方法。
我想你正在静态地调用非静态方法 - 这就是为什么你不在对象上下文中。
如果是这样,请考虑重写对 randomLocation()方法的调用以使用对象上下文 - e.i。
$x = new YourObjectName();
$x->randomLocation();
或将 checkConnection()方法重写为静态,并在 randomLocation()方法中静态调用。