他の投稿から、名前空間が定義されていて、別の名前空間でオブジェクトを動的に作成したい場合は、文字列を作成して新しい呼び出しで使用する必要があるようです。しかし、私は奇妙な振る舞いをしています。この方法は、名前空間をまたいで機能しないようです。
ユーザー.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」コマンドを活用できるのはなぜですか?