我怀疑我在这里遇到的主要问题是我对该函数的实际情况缺乏了解。spl_autoload_register()
基本上我正在尝试创建一个新网站并尝试使用比以前更好的系统(以前的系统没有类,没有结构,实际上什么都没有)。
我正在使用 Linux 机器来写这个。
我的结构是:
+index.php
-lib (folder)
+toolset.inc.php
-database (folder)
+handler.php (uses PDO)
-model
+model1.php
+model2.php
+etc
等等。
我可以使用我从中调用lib
的文件将任何这些类文件包含在结构中。但是,当我尝试在.toolset.inc.php
index.php
handler.php
工具集.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');
?>
索引.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 在其中工作。我已经搜索了几个小时的论坛、StackOverflow 和教程,但找不到我正在寻找的信息。
一些帖子和网站说我需要通过使用use \PDO
或$this->connection = new \PDO(...)
在这种情况下都不能将 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
)