1

私は次のようなフォルダ構造を持っています:

index.php
app/
    controllers/
                folder1/
                        class.php

class.phpには名前空間の定義はありません。インデックスに関連するフォルダ構造から生成された名前空間にclass.phpを配置することは可能でしょうか?したがって、次のようにロードされます。

new \app\controllers\folder1\classInFile();

または、名前空間を動的に作成する方法はありませんか?

4

3 に答える 3

2

名前空間を含むファイルは、他のコードの前にファイルの先頭で名前空間を宣言する必要があります。

http://php.net/manual/en/language.namespaces.definition.php

つまり、名前空間宣言の前にコードを実行することはできず、その後は手遅れになります。内省的なランタイムハックにもかかわらず:いいえ、それは不可能です。たとえそうであったとしても、コードが実行/含まれるフォルダーなどの実行時情報に依存します。名前空間は、var\www\myproject\foo\bar\bazまたは単にfoo\bar\bazです。それをどのように判断しますか?それは厄介になっています。

本当に、それがもう少しタイプすることを意味するとしても、それを明示的にしてください。名前空間はクラスの一部です。実行時に動的に名前を生成しないでください。

于 2012-11-22T10:03:43.477 に答える
0

名前空間を動的に生成するべきではありません。コンパイル時に名前空間を設定して読み取ることはできません。

いずれの場合も、コードが実行される前に名前空間が提供/定義されます。

于 2012-11-22T10:03:13.637 に答える
0

PHPソースファイルを動的に作成できる場合は、名前空間をclass.php内で定義する必要があります。名前空間は、動的に作成できます。

于 2012-11-22T10:04:09.783 に答える