我對OOP編程有點新,所以很可能我犯了一些愚蠢的錯誤。這是我的問題。當運行我的代碼,我得到了以下錯誤:全局變量的問題
Fatal error: Call to a member function checkLogin() on a non-object in /application/libraries/Session.php on line 30
下面是session.php文件的文件(我的註釋行30,使其更容易找到):
<?php
require_once(LIBPATH . 'MySQLDB.php');
require_once(LIBPATH . 'Authentication.php');
class Session {
public $url;
public $referrer;
public $redirect;
function Session() {
$this->startSession();
}
function startSession() {
global $auth;
session_start();
if (isset($_SESSION['url'])) {
$this->referrer = $_SESSION['url'];
} else {
$this->referrer = '/';
}
$this->url = $_SESSION['url'] = $_SERVER['PHP_SELF'];
if (isset($_SESSION['redirect'])) {
$this->redirect = $_SESSION['redirect'];
} else {
$this->redirect = $_SESSION['redirect'] = '/';
}
$auth->checkLogin(); // LINE 30
}
function setRedirect($page) {
$this->redirect = $_SESSION['redirect'] = $page;
}
}
在我嘗試排查這個問題,我在include和class聲明之間放置了echo gettype($ auth)。結果輸出爲「Object」。然後,我在startSession函數中聲明全局$ auth之後立即嘗試放置echo gettype($ auth)。結果輸出爲「NULL」。任何想法可能是我的問題?謝謝。
編輯: $權威性聲明中Authentication.php
+1 Globals很糟糕,它們會在6年後消失,反正它的使用方法是不好的做法。 – 2009-05-28 23:42:05
快速問題。在我看來,繼續實例化某些類的新實例(如數據庫類或會話類)會很糟糕。我已經做了一些閱讀,看起來像這樣的解決方案是使用單例模式。你會同意使用Singleton模式還是他們更好的方法?謝謝你的幫助。 – blcArmadillo 2009-05-29 00:43:51