我创建了一个名为class_one
的类,其名称空间为MyClassOne
,如下所示。
class_one.php
namespace MyClassOne;
class class_one
{
function __construct()
{
echo 'I am from Class One Constructor';
}
}
我正尝试在index.php
文件中将其用作:
namespace MyClassOne;
require_once('class_one.php');
$one = new class_one();
它工作正常,但是当我尝试将__autoload
魔术函数包含为:
namespace MyClassOne;
function __autoload($className)
{
include_once("$className.php");
}
$one = new class_one();
出现错误:
严重错误:未捕获的错误:在以下位置找不到类“ MyClassOne \ class_one” C:\ xampp \ htdocs \ PHP \ autoload \ index.php:9堆栈跟踪:抛出#0 {main} 在第9行的C:\ xampp \ htdocs \ PHP \ autoload \ index.php中
请帮助我这段代码在哪里做错了?有更好的方法吗?
答案 0 :(得分:2)
您要在程序代码中放置一个名称空间声明,这会将__autoload()
函数放入该名称空间中,使其成为\MyClassOne\__autoload()
而不是所需的\__autoload()
,因此PHP不会尝试加载类时将其触发。
通常,您只希望在类定义文件中使用名称空间声明:
namespace MyClassOne;
class class_one
{
}
然后在程序代码中使用use
:
use MyClassOne\class_one;
$one = new class_one();
或使用完整的类名:
$one = new \MyClassOne\class_one();
有关普遍接受的自动加载过程的详细信息,请参见PSR-4。
答案 1 :(得分:1)
spl_autoload_register(function($class) {
include 'classes/' . str_replace('\\', '/', $class) . '.class.php';
});