2017-01-10 70 views
1

有什麼辦法自動加載哈克類型別名?我將它們放在PSR-4兼容路徑上的單獨文件中,儘管我知道它們是僅限於Hack的,並未在PSR-0或PSR-4中正式提及,但我認爲會發生以下情況之一:自動加載哈克類型別名

  1. HHVM將擴展型別名爲其基本類型,或
  2. spl_autoload會認爲類型爲一類,功能或接口名稱和執行腳本,解決別名。

但是,都沒有發生。在運行時,方法調用失敗的原因不兼容的類型的提示,即:

Catchable fatal error: Argument passed to {method_name} must be an instance of {type_alias}, {concrete_type} given.

編輯:我要指出,我特別用作曲。我不確定這是否是Composer特有的。

回答

2

是的,你可以在HHVM中自動加載類型。您需要使用類映射方法和HH\autoload_set_paths函數。

hhvm-autoload包增加了支持生成必要的地圖到作曲家。

+0

我站立得心應手! – concat

0

我不相信這是可能的。 PHP不會爲自動加載註冊類型提示。它並不需要,因爲實現類型提示的唯一方法是傳遞該類或其子類,其構造會觸發自動加載器調用。當解釋者檢查它時,對於類型提示是不可知的。

這只是Hack中的一個問題,因爲類型別名引入了這種可能性。爲了與PHP保持一致,我希望上述兩個唯一可行的解​​決方案是HHVM在編譯字節碼時擴展類型別名。