2 回答

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個贊
類名中不能有下劃線,目錄結(jié)構(gòu)中也不能有下劃線。
如果您的類名為Models_MyWhatever_Migration
,因?yàn)槟谶w移期間動態(tài)地將字符串“MyWhatever”添加到類名,則該類必須放置在src/Models/MyWhatever/Migration.php
. 你不能把它放在src/Models/MyWhatever_Migration.php
.
如果您想保留下劃線作為文件名的一部分,您必須切換到 PSR-4 并使用命名空間。

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個贊
創(chuàng)建新類的實(shí)例時出錯
$class = __DIR__ . "/Models/{$model}_Migration.php";
$instantiated = new $class;
這是錯誤的,因?yàn)槟荒芡ㄟ^其文件名創(chuàng)建類的實(shí)例,例如:
$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 標(biāo)準(zhǔn)后,老實(shí)說,我認(rèn)為在使用 PSR-0 時無法實(shí)現(xiàn)您想要的(類名帶有下劃線但沒有目錄)。該標(biāo)準(zhǔn)明確指出:
CLASS NAME 中的每個 _ 字符都轉(zhuǎn)換為 DIRECTORY_SEPARATOR。
可能的解決方案:Classmap 自動加載器
但是您可以對這些文件使用作曲家的類映射自動加載器:
該映射是通過掃描給定目錄/文件中所有 .php 和 .inc 文件中的類來構(gòu)建的。您可以使用類映射生成支持為所有不遵循 PSR-0/4 的庫定義自動加載。要配置它,您可以指定所有目錄或文件來搜索類。
它可能看起來像這樣(但我無法對其進(jìn)行測試):
"autoload": {
"psr-0": {
"" : [
"src/"
]
},
"classmap": ["src/Models/"]
}
- 2 回答
- 0 關(guān)注
- 177 瀏覽
添加回答
舉報(bào)