带有命名空间的 PHP 自动加载不加载文件

问题描述

我的自动加载器和命名空间有问题。 自动加载器下方

<?PHP
spl_autoload_register( function( $class ) {

    $folder = 'include/';
    $prefix = 'class.';
    $ext    = '.PHP';
    
    $fullPath = $folder . $prefix . $class . $ext;
  
    if( !file_exists( $fullPath ) ){
        print 'Class file not found!';
        return false;
    }

    require_once $fullPath;
});
?>

在索引文件下方

<?PHP
require 'autoload.PHP';
//use backslash for namespace
$pers = new Person\Person();
?>

Person 类的文件保存在目录 root->include->Person 我像这样在类文件中使用了命名空间

<?PHP
namespace Person;

class Person{
    function __construct(){
        print 'autoload works';
    }
}
?>

如果我在浏览器中访问索引文件,它会返回“找不到类文件”。 我是否正确使用了命名空间?

解决方法

您尝试包含 包含/class.Person\Person.php

  1. 如果你的操作系统是linux,你必须知道/和\之间有区别
  2. 文件夹名称中是否存在前缀类?
,

稍微更改您的自动加载代码

<?php
spl_autoload_register( function( $class ) {

    $folder = 'include/';
    $prefix = '.class';
    $ext    = '.php';
    //replace the backslash 
    $fullPath = $folder . str_replace( "\\",'/',$class ) . $prefix . $ext;

    if( !file_exists( $fullPath ) ){
        print 'Class file not found!';
        return false;
    }
    
    require_once $fullPath;
});
?>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...