4

他の投稿から、名前空間が定義されていて、別の名前空間でオブジェクトを動的に作成したい場合は、文字列を作成して新しい呼び出しで使用する必要があるようです。しかし、私は奇妙な振る舞いをしています。この方法は、名前空間をまたいで機能しないようです。

ユーザー.php:

namespace application\models;

class User {

        public function hello() {
                echo "Hello from User!";
        }
}

Controller.php:

namespace application\controllers;

use application\models;

require('User.php');

$userStr = 'models\\User';
//$userOne = new $userStr();  //Doesn't work. Gets a "Class 'models\User' not found" error
$userOne = new models\User();  //Works fine

$userStr = '\\application\\models\\User';
$userTwo = new $userStr();  //Works fine

$userOne->hello();
$userTwo->hello();

クラス名に変数を使用する場合、変数にあるときに完全修飾名前空間を使用する必要があるのに、ハードコードされているのに、「use」コマンドを活用できるのはなぜですか?

4

1 に答える 1

3

use変数クラス名にインポートすることはできません。これがPHPの制限です。

関連する質問も参照してください。

于 2012-11-09T18:43:33.243 に答える