2016-12-14 122 views
0

所以主要是這是由我的代碼結構造成的:PHP的需要()不能識別別名類

File1.php

use \Class1 as Blah; 
require 'File2.php'; 

File2.php

$closure = function ($arg) { 
    return new Blah($arg); 
}; 

不知背後的部分... as在使用require()後未被識別。

+0

如果您要求文件超出匿名函數的範圍,那麼您可以通過該環境中的開發人員訪問該文件,以便您試圖實現哪種功能? – KDOT

+0

@KDOT讓我編輯這個,我已經發現,這不是一個與Slim本身有關的問題。我是由於使用「require()」 – RegisteredUser

回答

4

命名空間別名是隻在你寫的use聲明文件中的有效別名不會跨文件邊界傳輸。如果您想要在File2.php中使用use Class1 as Blah,則需要將該語句放在File2.php的頂部。

+0

包含的代碼無法識別「使用SomeClass作爲\ Another」這一事實造成的,我不知道您如何輕鬆地措詞...... +1 – KDOT

+0

謝謝!我剛剛發現了另一個問題,顯然我不知道我究竟在尋找什麼。如果我考慮一下,這樣處理它就非常合理 – RegisteredUser

0

不是由代碼認可 - 斯利姆是不是一個編譯器,它是一個框架。

該代碼將執行到PHP編譯器標準,因此使用默認值。

use SomeNamespace\SomeClass as SomePrefix; 

將工作無論你想達到的目標。 require_once()方法會加載您的PHP文件來保存該類,因爲您的目標是\目錄,所以我假設它沒有自定義名稱空間。

如果你在一個班級內部工作,那麼這可能是你的問題,在使用require_once()加載ParseMarkdownClass文件後,你的代碼應該類似於這個。

use ParseMarkdownClass as Md; 

class SomeClass 
{ 
    public $container; 

    public function __construct() 
    { 
     $this->container = (object)['m' => function() { 
      return new Md(); 
     }]; 
    } 
} 

(new SomeClass())->$container->m()->...