2017-01-20 8 views
1

私は自分のプロジェクトを簡単にコピー&ペーストして相互に貼り付けることができますようにしたいと思います。不明なプロジェクトレベルのAutoLoader

私のプロジェクトの構造はProjectName /(bin、config、lib)です。

コピー+貼り付け後、私はProjectName1/lib/ProjectName2/lib/ProjectName3 /のようなチェーンを持っています。

オートローダが、ファイルが呼び出されたレベルに従ってファイルを検索すると、これは素晴らしいことです。

たとえば、ProjectName1/lib/ProjectName2/lib /内のクラスが "new Config"を呼び出す場合は、ProjectName1/lib/ProjectName2/config/config.phpにあるconfigファイルを受け取る必要があります。

(但し、ProjectName1/config/config.phpのいずれも、ProjectName1/lib/ProjectName2/lib/ProjectName3/config/config.phpのいずれもオンではありません)。

これを行う方法はありますか?

編集: ファイルを一意にすることは意味がありますか?例: 'config.php'が 'ProjectName2Config.php'だった場合、競合する可能性はほとんどありません。そのため、オートローダーはどこからでも検索でき、最終的にファイルであることがわかります。

編集: 各プロジェクトでは、コピー+貼り付けのために自分のオートローダを使用できます。しかし、私はProjectName1のものだけをロードすると思った。それぞれを簡単にとどめることができるように、それらをすべてロードする方が良いでしょうか?

乾杯、 ピーター

PS:私はちょうど休憩をプログラミング3年から戻ってきました。上記のことが世俗的に悪い考えで、私に理由を教えてもらえればうれしいです:-)

+0

ちょうどそれを行うphp関数を書いて、それをオートローダーとして登録してください。欠点は、コーディングツールが正しいクラスを見つけるのに苦労するかもしれないということかもしれません。構造が十分に乱雑になる場合は、そうかもしれません。 (http://php.net/manual/en/function.spl-autoload-register.php) –

答えて

0

これはあなたのプロジェクトを管理するための奇妙な方法だと思います。 Project1とProject2のメインスクリプトはどこにありますか?私は私のindex.phpまたはメインプロジェクトでこれを書いている何たとえば

は、/ libにファイルを含める:

<?php define('ROOT_PATH', dirname(__FILE__) . '/'); ?> 

を私は常に包含パスの開始としてこれのroot_pathを使用しています。あなたのケースのProject1のroot_pathに

は "/の/ var/www /のProject1の" ようなものになるだろうとのProject2のroot_pathはProject1の中でこのように新しいコンフィグ "の/ var/www /のProject1の/ libに/のProject2 /"

だろうProject2では独自のconfig.phpファイルを使用します。

+0

ありがとうございます。私は戻っていない限り、これは良いように聞こえる。しかし、私は言った: プロジェクト1開始... $ project2 = new Project2; $ someValue = $ project2-> getSomeThing(); Project1続きます.... 新しいSomeThingFromProject1(); この場合、ROOT_PATHはProject2から取得されるでしょうか? –

+0

あなたの質問に答えるには:私は他の編集の例のようにProject2を使用するつもりです。私がProject1で作業していて、Project2から何かが必要な場合は、必要な部分だけをコピーするのではなくプロジェクト全体を含めることをお勧めします。 Project2が最終的に更新されるときに、これを管理しやすくすることを望みます。たぶん私はむしろ "プロジェクト"ではなく "パッケージ"という言葉を使うべきです。 –

+0

「パッケージ」または「モジュール」の場合はわかります。私はそのライブラリ、モジュール/パッケージ(と他のもの)とプロジェクトを持っています。そして、すべてのモジュール/パッケージには、独自のconfigs、view、controllers、sqlsなどがあり、独立しています。 – zenko