2 回答
TA贡献1805条经验 获得超9个赞
类名中不能有下划线,目录结构中也不能有下划线。
如果您的类名为Models_MyWhatever_Migration
,因为您在迁移期间动态地将字符串“MyWhatever”添加到类名,则该类必须放置在src/Models/MyWhatever/Migration.php
. 你不能把它放在src/Models/MyWhatever_Migration.php
.
如果您想保留下划线作为文件名的一部分,您必须切换到 PSR-4 并使用命名空间。
TA贡献1765条经验 获得超5个赞
创建新类的实例时出错
$class = __DIR__ . "/Models/{$model}_Migration.php";
$instantiated = new $class;
这是错误的,因为您不能通过其文件名创建类的实例,例如:
$instance = new /var/www/html/.../Class.php; // <-- wrong
相反,您需要使用类名和命名空间:
$instance = new \Project\Namespace\Class;
所以在你的具体情况下,它可能是这样的
$class = "\\Project\\Models\\".$model."_Migration";
// ^ depends on the real namespace and name of your migration classes
$instantiated = new $class;
PSR-0 和下划线
再次阅读PSR-0 标准后,老实说,我认为在使用 PSR-0 时无法实现您想要的(类名带有下划线但没有目录)。该标准明确指出:
CLASS NAME 中的每个 _ 字符都转换为 DIRECTORY_SEPARATOR。
可能的解决方案:Classmap 自动加载器
但是您可以对这些文件使用作曲家的类映射自动加载器:
该映射是通过扫描给定目录/文件中所有 .php 和 .inc 文件中的类来构建的。您可以使用类映射生成支持为所有不遵循 PSR-0/4 的库定义自动加载。要配置它,您可以指定所有目录或文件来搜索类。
它可能看起来像这样(但我无法对其进行测试):
"autoload": {
"psr-0": {
"" : [
"src/"
]
},
"classmap": ["src/Models/"]
}
- 2 回答
- 0 关注
- 155 浏览
添加回答
举报