私は自分のシンプルなMVCフレームワークをビルドしようとしています。主に教育目的のために、これまでのCodeIgniterを使って、フレームワークに取り入れる機能のインスピレーションの大半を提供しました。CodeIgnitersの動的ロードクラスはどのように機能しますか?
私はCodeIgnitersのようなローダークラスを構築したいと思いますが、彼らは理にかなって呼び出し元のクラスすなわち
class Random_Controller{
function __construct(){
$this->load->helper('some_class');
$this->some_class->do_something();
/*
How does CI load some_class as if it were a property of Random_Controller?
I can understand using something like $$class_name = new $class_name();
Or $$this->class_name = new $class_name();
But how can the dynamically named object be used with $this->?
*/
}
}
うまくいけばのプロパティであるかのように、私はCIのクラスをロードする方法を理解することはできません...
私は、正しい説明でどのように単純なものが表示されるかに常に驚いています。しかしもう1つの質問。
$ loadがロードクラスのインスタンスへの参照であり、ロードされたすべてのクラスのレコードが配列内に保持されている場合、基本的には次のようになります: $ this-> loaded_classes [$ key] - > do_something ?
したがって、CIは配列を変数名に解決しますか?私は変数が存在しないかメソッドが存在しないときに呼び出されるいくつかのPHPマジックメソッドを見てきましたが、これはこれらの魔法のメソッドと組み合わせて行われるのでしょうか?つまり、$ this-> some_classプロパティが存在しない場合、そのキーを持つ配列内の要素を検索しますか?
それは...
あなたは実際に実装を見て気にしましたか?いいえ?それから、あなたがそれについて理解していない特定の事柄であなたの質問を更新してください。 – Gordon
私は実装を見てはい、私の質問は '$ this->'経由で変数オブジェクトにアクセスする方法でした。私は解決策を見つけました。変数オブジェクトは変数名への参照によって代入される必要があります。&newはPHP 5で非推奨の警告を生成します。解決策は$ this-> $ class_name =&$ temp_classでした。 $ this-> dynamic_name-> do_something(); – 4D1