ホームページ >バックエンド開発 >PHPチュートリアル >根本的な問題について考えています
他の人が MVC について話しているのをよく見かけますが、もちろん、私は彼らの言うことを信じますが、その時は理由について考えませんでした。今日、ブラウザのアドレスバーに URL アドレスを書き込んだ後、なぜブラウザは必要なデータをこれほど素直に見つけられるのか、ふと考えました。
HTMLページのような静的なページとしてわかりやすく、ブラウザが直接そこに飛んで開きます。
しかし、動的ページの場合、これは当てはまりません。これは、一部の動的ページには MVC モードのメソッドがあり、なぜそれを取得できるのか疑問に思う人がいるからです。
そこで、私は推論を始めましたが、それが正しいかどうかはわかりません:
まず、アドレス バーでのわかりやすいフォーム値の転送について説明しましょう。たとえば、
$myVar = $_GET['myvar '];
$twoVar = $_GET['twovar'];
echo $twoVar;
結果ページは 11111 111111111188888888888 を出力します。サーバーはグローバル変数の値を取得するためです。
しかし、MVC のコントローラーは値ではなくメソッドであるため、このメソッドを使用して MVC モードを推論するのは混乱します。 (解決策)
例
class test{ public function t1(){ return 'function t1'; } }$controller = 'test';//控制器,$_GET 获取$action = 't1';//方法,$_GET 获取$class = new test();$ref1 = new ReflectionMethod($class,$action);echo $ref1->invoke($class);
リフレクションがなければ、PHP ネイティブ コードはより直感的になります
class test{ public function t1(){ return 'function t1'; }} $controller = 'test';//控制器,$_GET 获取$action = 't1';//方法,$_GET 获取 $class = new $controller;echo $class->$action();
上の 2 人の意味がわかりました。 new の動作を考慮していないことがわかりました。
thinkphp などのフレームワークでは、アドレス バーはグローバル変数の関数を取得することで目的のクラスを簡単に見つけて、そのクラスに入力できます。 次に問題は、これをどのように行うかです。new がなければ不可能だからです。クラスを呼び出すには ここのメソッドに関するヒントをいくつか教えてくださいクラス名がわかったら、ただ クラス名を新しくする ことはできますか? クラス名が変数に含まれているだけなので、必要なのは
MVC はオブジェクト指向である必要はありません
$controller = 'test';//控制器,$_GET 获取$action = 't1';//方法,$_GET 获取include $controller . '.php';echo $action();も可能です
フレームワークには
$controller.'.php';$controller = 'test';
echo $action();