这是我第一次使用自动加载,但我一直收到错误消息说找不到我的类:
Fatal error: Class 'Classes\Sunrise\DB' not found in my\sample\path\.sunrise.app\init.php on line 52
编辑: 第 52 行是我使用 DB 类中的静态方法的地方。出于某种原因,PHP 说找不到 DB 类。
我的结构:
order (Folder)
+ index.php
.sunrise.app
+ init.php
+ ordersetup.php
+ Classes (Folder)
+ Sunrise (Folder)
+ DB.php
文件 init.php
包含我的自动加载器并包含在文件 ordersetup.php
中,后者又包含在 order/index.php
和 include_once '../.sunrise.app/ordersetup.php';
在文件 .sunrise.app/init.php
我需要使用 DB 类但遇到了上面显示的错误。我做错了什么?
我在 .sunrise.app/init.php
中的自动加载器:
function my_autoload($class_name) {
include $class_name. '.php';
}
spl_autoload_register('my_autoload');
我在 classes/Sunrise/DB.php
中的数据库类:
<?php namespace Classes\Sunrise;
use PDO;
class DB { ... }
编辑文件夹Sunrise
在文件夹Classes
最佳答案
因为分隔符是 \
你需要用操作系统的正确目录分隔符替换它们,如果这是一个 linux 操作系统那么它们需要是 /
/p>
function my_autoload($class_name) {
$class_name = str_replace("\\","/",$class_name);
require "../.sunrise.app/".$class_name. '.php'; //you have to use path relative to
// order or use a absolute path
// /var/www/.sunrise.app/
}
此外,如果 linux 系统确保类的大小写与文件夹的大小写匹配,因为 linux 区分大小写
关于PHP 自动加载类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17514976/