子文件夹中的自动加载类

时间:2014-02-01 14:40:55

标签: php

在我的PHP项目中,所有类文件都包含在名为“classes”的文件夹中。每个类都有一个文件,随着越来越多的功能被添加到应用程序中,classes文件夹变得越来越大,组织也越来越少。现在,此代码在初始化文件中为应用程序中的页面自动加载类:

spl_autoload_register(function($class) {
require_once 'classes/' . $class . '.php';

});

如果要将子文件夹添加到现有的“classes”文件夹中并在这些子文件夹中组织类文件,是否有办法修改自动加载代码以使其仍然有效?

例如 - 假设classes文件夹中的子文件夹如下所示:

  • DB
  • 登录
  • 目录

4 个答案:

答案 0 :(得分:2)

我建议你在http://www.php-fig.org

查看PSR标准

此教程还将帮助您自己构建和理解一个。 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');