【发布时间】:2017-11-01 02:32:16
【问题描述】:
我们如何将放置在不同目录中的所有类加载到一个 PHP 文件中, 表示如何自动加载类
【问题讨论】:
-
这已经被广泛记录in PHP's docs。
-
这和 CSS 有什么关系?
我们如何将放置在不同目录中的所有类加载到一个 PHP 文件中, 表示如何自动加载类
【问题讨论】:
你可以使用ps4和composer autoloader:https://getcomposer.org/doc/01-basic-usage.md#autoloading
composer.json:
{
"autoload": {
"psr-4": {"My_Name_Space\\": "My_Folder/"}
}
}
然后运行
composer dump-autoload
【讨论】:
<?php spl_autoload_register(function ($class_name) { include $class_name . '.php'; }); $obj = new MyClass1(); $obj2 = new MyClass2(); ?> 我们可以这样加载类吗?
您应该为类命名,以便下划线 (_) 转换为目录分隔符 (/)。一些 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;
}
示例取自Autoload classes from different folders
Edit#1 未测试
spl_autoload_register(function ($class_name) {
$filename = str_replace('_', DIRECTORY_SEPARATOR, strtolower($class_name)).'.php';
$file = AP_SITE.$filename;
if ( ! file_exists($file))
{
return FALSE;
}
include $file;
});
【讨论】:
<?php spl_autoload_register(function ($class_name) { include $class_name . '.php'; }); $obj = new MyClass1(); $obj2 = new MyClass2(); ?> 我们可以这样加载类吗?