我懷疑我在這裏遇到的主要問題是我不瞭解究竟是與spl_autoload_register()
函數發生了什麼。使用namepsace和全局類
基本上我想開始一個新的網站,並試圖用一個更好的系統比我以前使用(以前的系統是沒有階級,沒有結構,沒有任何事情真的)。
我使用的是Linux中寫上。
我的結構是:
+index.php
-lib (folder)
+toolset.inc.php
-database (folder)
+handler.php (uses PDO)
-model
+model1.php
+model2.php
+etc
等。
我可以在lib
結構中使用我從index.php
調用的文件toolset.inc.php
包含任何這些類文件。但是,當我試圖在handler.php
中使用PDO時遇到問題。
toolset.inc.php:
<?php
namespace lib;
function load($classNameSpace) {
echo $classNameSpace."<br />";
$include_path = __DIR__ . DIRECTORY_SEPARATOR . str_replace("\\", "/", $classNameSpace) . ".php";
if(is_readable($include_path)){
require_once($include_path);
}
}
spl_autoload_register(__NAMESPACE__ . '\load');
?>
的index.php:
<?php
require_once("lib/toolset.inc.php");
use database\handler;
$test = new handler();
?>
/lib/database/handler.php(簡體版,在現實中我的連接細節等閱讀):
<?php
namespace database;
class handler{
//define some connection stuff
(...)
function __constructor(){
$attrs[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$this->connection = new PDO(...);
}
}
雖然我可以得到處理程序文件將包含在上述toolset.inc.php
文件,我不能讓PDOŧ o在裏面工作。我一直在搜索論壇,StackOverflow和教程幾個小時,無法找到我正在尋找的信息。
幾個帖子和網站說,我需要申報PDO作爲絕對使用use \PDO
或$this->connection = new \PDO(...)
然而在這種情況下,這些工作都沒有。
我很茫然,爲什麼,而我幾乎完全相信它,因爲我誤解的東西,或者我失去了一些東西很明顯。誰能解釋爲什麼 PDO不能列入這樣,什麼我需要做的就是它的要求包括哪些內容?
非常感謝
編輯: -錯誤並根據其解決方案的建議我嘗試改變,但一個例子是:
Fatal error: Class 'PDO' not found in /var/www/html/toolset/lib/database/handler.php on line 63
雖然我知道這樣說,它尋找的文件PDO.php
lib
文件夾,這是同時在我指定的目錄use \PDO;
或$test = = new \PDO(...)
應當顯然迫使它使用PHP類,而不是一個調用它(lib
)
1.這個問題無關,與PDO或MySQL。 「我不能讓PDO在裏面工作。」不是適合堆棧溢出的問題。你有沒有收到任何錯誤訊息?如果不是 - 爲什麼?如果是 - 爲什麼你要爲自己保留它們? –
知道我會錯過一些具有工作趕到了。更新的問題。 我之所以有PDO在那裏是因爲我不知道這是否是我嘗試使用PDO與斜線('$測試=新\ PDO(...)')的方式,或者如果它是什麼與spl_autoloader做什麼以及我如何設置。兩者都可能是原因。不知道sql標記來自哪裏。 – Doug
斜線屬於不PDO而是命名空間。沒關係,如果PDO,mysqli的或DateTime類 –