PSR-0準拠のatmである独自のMVCフレームワークを作成しました。php-ActiveRecord を ORM として使用します。User
名前空間 に存在する という名前のコントローラーから、名前空間に存在TapMVC\Application
する ActiveRecord モデル ALSO を呼び出そうとする問題を発見しました。User
TapMVC\Db
namespace TapMVC\Application;
use TapMVC\Db;
class User extends Controller {
function index() {
print_r(Db\User::find('all'));
}
}
これにより、次のエラーが発生します。
12 行目の /path/to/project/app/Controllers/user.php でクラス TapMVC\Application\User を再宣言できません
12行目は、ユーザーコントローラーのプロトタイプ/宣言です。
なぜ私はこれを行うことができないのですか?名前空間が異なり、インスタンス化時に名前空間プレフィックスを持っているクラスの場合、同じ名前を付けても問題ないと思いましたか? また、データモデルは自動ロードによってコントローラーの前に宣言されているように見えます (エラーをトリガーするユーザーコントローラー宣言であるため)。では、データモデルが名前空間にあり、コントローラーの場所にTapMVC\Db
ない場合に競合が発生するのはなぜですか?TapMVC\Application
異なる名前空間を定義しても、PHPはアクティブなファイルと同じ名前空間でオブジェクトを宣言することがわかりますが、よくわかりません。
誰かが助けてくれることを願っているので、データモデルに次のように名前を付ける必要はあり(ProjectName-prefix)User
ません。データベーステーブルを編集して、ユーザーモデルとユーザーコントローラーを作成します。