在我的PHP项目中,所有类文件都包含在名为“classes”的文件夹中。每个类都有一个文件,随着越来越多的功能被添加到应用程序中,classes文件夹变得越来越大,组织也越来越少。现在,此代码在初始化文件中为应用程序中的页面自动加载类:
spl_autoload_register(function($class) {
require_once 'classes/' . $class . '.php';
});
如果要将子文件夹添加到现有的“classes”文件夹中并在这些子文件夹中组织类文件,是否有办法修改自动加载代码以使其仍然有效?
例如 - 假设classes文件夹中的子文件夹如下所示:
答案 0 :(得分:2)
此教程还将帮助您自己构建和理解一个。 http://www.sitepoint.com/autoloading-and-the-psr-0-standard/
获取所有子文件夹的代码段:
function __autoload($className) {
$extensions = array(".php", ".class.php", ".inc");
$paths = explode(PATH_SEPARATOR, get_include_path());
$className = str_replace("_" , DIRECTORY_SEPARATOR, $className);
foreach ($paths as $path) {
$filename = $path . DIRECTORY_SEPARATOR . $className;
foreach ($extensions as $ext) {
if (is_readable($filename . $ext)) {
require_once $filename . $ext;
break;
}
}
}
}
答案 1 :(得分:1)
我的解决方案
function load($class, $paste){
$dir = DOCROOT . "\\" . $paste;
foreach ( scandir( $dir ) as $file ) {
if ( substr( $file, 0, 2 ) !== '._' && preg_match( "/.php$/i" , $file ) ){
require $dir . "\\" . $file;
}else{
if($file != '.' && $file != '..'){
load($class, $paste . "\\" . $file);
}
}
}
}
function autoloadsystem($class){
load($class, 'core');
load($class, 'libs');
}
spl_autoload_register("autoloadsystem");
答案 2 :(得分:0)
根
| - ..
| -src // class目录
| --src / database
| --src / Database.php //数据库类
| --src /登录
| --src / Login.php //登录类
| -app //应用程序目录
| --app / index.php文件
| -index.php
-----------------------------------
应用程序文件夹中的index.php代码自动加载来自src文件夹的所有类。
spl_autoload_register(function($class){
$BaseDIR='../src';
$listDir=scandir(realpath($BaseDIR));
if (isset($listDir) && !empty($listDir))
{
foreach ($listDir as $listDirkey => $subDir)
{
$file = $BaseDIR.DIRECTORY_SEPARATOR.$subDir.DIRECTORY_SEPARATOR.$class.'.php';
if (file_exists($file))
{
require $file;
}
}
}});
根文件夹中的index.php代码自动加载来自src文件夹的所有类。
更改变量$ BaseDIR,
$BaseDIR='src';
答案 3 :(得分:0)
autoload.php
<?php
function __autoload ($className) {
$extensions = array(".php");
$folders = array('', 'model');
foreach ($folders as $folder) {
foreach ($extensions as $extension) {
if($folder == ''){
$path = $folder . $className . $extension;
}else{
$path = $folder . DIRECTORY_SEPARATOR . $className . $extension;
}
if (is_readable($path)) {
include_once($path);
}
}
}
}
?>
index.php
include('autoload.php');