0

我在 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();
    }

我看不出两个有效和无效的功能有什么不同,
我希望你能帮助我

4

1 回答 1

0

您没有指定如何调用 randomLocation()方法。

我假设您正在静态调用该非静态方法 - 这就是您不在对象上下文中的原因。

如果是这样,请考虑重写对randomLocation()方法的任一调用以使用对象上下文 - ei

$x = new YourObjectName();

$x->randomLocation();

或将checkConnection()方法重写为静态并在randomLocation()方法中静态调用它。

于 2013-06-18T13:55:39.903 回答