微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从不同文件夹自动加载类

如何解决从不同文件夹自动加载类

您应该命名您的类,以便将下划线(_)转换为目录分隔符(/)。一些PHP框架可以做到这一点,例如Zend和Kohana。

因此,您可以为课程命名,然后Model_Article文件放入其中classes/model/article.PHP,然后自动加载就可以了…

function __autoload($class_name) 
{
    $filename = str_replace('_', DIRECTORY_SEParaTOR, strtolower($class_name)).'.PHP';

    $file = AP_SITE.$filename;

    if ( ! file_exists($file))
    {
        return FALSE;
    }
    include $file;
}

还要注意,您可以spl_autoload_register()使任何功能成为自动加载功能。它也更加灵活,允许您定义多个自动加载类型的函数

如果必须有多个自动加载功能,则spl_autoload_register()允许这样做。它有效地创建了自动加载功能队列,并按照定义的顺序遍历每个功能。相反,__ autoload()只能定义一次。

PHP 7.2.0起,__ autoload 已被弃用。强烈建议不要使用此功能。请参阅PHP文档以获取更多详细信息。http://php.net/manual/zh/function.autoload.php

解决方法

这就是我自动加载controllers文件夹中所有类的方式,

# auto load controller classes
    function __autoload($class_name) 
    {
        $filename = 'class_'.strtolower($class_name).'.php';
        $file = AP_SITE.'controllers/'.$filename;

        if (file_exists($file) == false)
        {
            return false;
        }
        include ($file);
    }

但是我的models文件夹中也有类,我也想自动加载它们-我该怎么办?我应该复制上面的自动加载并仅将路径更改为models/(但是不是重复吗?)?

谢谢。

编辑:

这些是我在控制器文件夹中的类文件名:

class_controller_base.php
class_factory.php
etc

这些是我在模型文件夹中的类文件名:

class_model_page.php
class_model_parent.php
etc

通常这就是我命名控制器类类的方式(我使用下划线和小写),

class controller_base 
{
...
}

class controller_factory
{
...
}

这通常是我为模型类类命名的方式(我使用下划线和小写),

class model_page 
    {
    ...
    }

    class model_parent
    {
    ...
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。