2017-08-07 20 views
1

我試圖自動加載了一堆輔助函數命名空間:自動裝填在PHP的整體命名空間(功能,而不是一類)

<?php 

namespace App\Str { 
    function contains($haystack, $needles) 
    { 
     foreach ((array)$needles as $needle) { 
      if ($needle !== '' && mb_strpos($haystack, $needle) !== false) { 
       return true; 
      } 
     } 
     return false; 
    } 

    function starts_with($haystack, $needles) 
    { 
     foreach ((array) $needles as $needle) { 
      if ($needle !== '' && substr($haystack, 0, strlen($needle)) === (string) $needle) { 
       return true; 
      } 
     } 
     return false; 
    } 
} 

PSR-4自動加載作曲家這裏不幫助:

Call to undefined function App\Str\starts_with() 

我明白知道,我不能(懶洋洋)自動加載功能,以及我給的建議,讓靜態函數的類,但我更喜歡函數式編程,我想先調查其他選項。例如,我可以以某種方式(懶洋洋地)自動加載整個名稱空間本身嗎?我想通過以下方式來使用此命名空間:

use App\Str as Str; 

$test = Str\starts_with('test', 't'); 

我想以某種方式指定作曲家,如果它看到App\Str命名空間,它應該懶洋洋地要求文件app/Str.php,真的不知道怎麼作曲家的作品,但會不會有這樣的事情?

+1

如果您對Classes不熟悉,並且喜歡函數式編程,那麼爲什麼不使用類作爲包裝器,並將所有函數作爲* static *函數放入該包裝器中。如果你這樣做,你將不需要實例化該類的新對象來使用它的函數。你可以做'ClassName :: myFunction()',因爲隨着代碼的增長,功能代碼將很難維護。 –

回答

2

不幸的是,這是不可能的。如果你想不偷懶自動加載,你必須添加到您的composer.json:

"autoload": { 
    "files": [ 
     "app/Str.php", 
     "app/Arr.php" 
    ] 
} 

其中每個條目是與你的函數的文件名。