MVC を学ぶ目的で(私は全く新しいです)私は自分のミニフレームワークを作成しています。おそらく私の質問はかなりばかげているかもしれませんが、いくつかの点では明らかですが、私は実際にGoogleにすることはできませんでした。また、長く冗長な投稿をして申し訳ありません。PHP MVCでモデルに対応する名前を生成
私のRouter
クラスはこのように動作しますwww.example.com/controller/controller_method
。
私のすべてのコントローラとモデルは、名前に同じプレフィックスが付いています。たとえば、私はUsersController
クラスとそれに対応するUsersModel
クラスを持っています。
コントローラとモデルは、対応する抽象クラスのインスタンスです。たとえばコントローラクラスは次のとおりです。
abstract class Controller
{
protected $model;
public function __construct(Model $model)
{
$this->model = $model;
}
}
ここで質問します。私は、コントローラのコンストラクタ内で、このように対応するモデルをインスタンス化しています:
class UsersController extends Controller
{
public function __construct()
{
parent::__construct(new UsersModel());
}
}
しかし、このようにそれを行うには右/許容/十分な次のようになります。
class UsersController extends Controller
{
public function __construct()
{
$model = str_replace("Controller", "Model", __CLASS__);
parent::__construct(new $model());
}
}
かであってもよく、さらに良いことに、このような:
abstract class Controller
{
protected $model;
public function __construct($classname)
{
$model = str_replace("Controller", "Model", $classname);
$this->model = new $model();
}
}
だから、子供のコンストラクタは次のようになります。
public function __construct()
{
parent::__construct(__CLASS__);
}
これは自動化されているようですが、おそらく、貧弱/低速/愚かなデザインの決定である可能性がありますか?私が心配している主な理由は、__CLASS__
定数が魔法であることです。私は、魔法の方法/定数が2-24倍遅くなる可能性があると読んでいます。