如何解决从不同文件夹自动加载类
您应该命名您的类,以便将下划线(_
)转换为目录分隔符(/
)。一些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 举报,一经查实,本站将立刻删除。