2017-08-07 1 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

クラスに慣れておらず、関数型プログラミングが好きな人は、クラスをラッパーと同じように使って、すべての関数を*静的関数としてラッパーの中に入れてみましょう。そうすることで、そのクラスの新しいオブジェクトをインスタンス化してその関数を使用する必要はありません。 'ClassName :: myFunction()'を実行することができます。これは、コードが成長するにつれて機能コードが後で維持するのが難しいためです。 –

答えて

2

残念ながら、それは不可能です。あなたは非怠惰な自動読み込みをしたい場合は、あなたのcomposer.jsonにこれを追加する必要があります。

各エントリは、あなたの機能を持つファイル名です
"autoload": { 
    "files": [ 
     "app/Str.php", 
     "app/Arr.php" 
    ] 
} 

関連する問題