php - 命名空间不能与 php 中的 __autoload 魔术函数一起使用
问题描述
我创建了一个名为命名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();
它给出了一个错误:
致命错误:未捕获的错误:在 C:\xampp\htdocs\PHP\autoload\index.php:9 中找不到类 'MyClassOne\class_one' 堆栈跟踪:#0 {main} 在 C:\xampp\htdocs\PHP\ 中抛出第 9 行的 autoload\index.php
请帮助我在这段代码中做错了什么?有一个更好的方法吗?
解决方案
您在程序代码中放置了一个命名空间声明,它将__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 。
推荐阅读
- wordpress - Wordpress 后端表单返回 JSON
- ms-word - INCLUDEPICTURE 字段中的相对路径有时会以某种方式更改为绝对路径
- java - 样本 obj=null; - 用法和含义
- sql - 存储过程测试
- r - 路径中带有德语特殊字符的 read_csv()
- swift - swift - 从 UIAlertController 操作中解除视图控制器可防止视图控制器取消初始化
- python - 烧瓶在 cmd 中显示响应但不在视图中
- vba - Access 2007 - 以编程方式多次运行报表
- sql - 基于另一个表中的值的列值
- customization - 自定义字段中的 TFS 2013 反斜杠