ホームページ >バックエンド開発 >PHPチュートリアル >根本的な問題について考えています

根本的な問題について考えています

WBOY
WBOYオリジナル
2016-06-23 13:14:191072ブラウズ

他の人が 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 がなければ不可能だからです。クラスを呼び出すには ここのメソッドに関するヒントをいくつか教えてください

クラス名がわかったら、ただ クラス名を新しくする ことはできますか? クラス名が変数に含まれているだけなので、必要なのは
new $ で変数をクラス名で保存するだけです

MVC はオブジェクト指向である必要はありません

$controller = 'test';//控制器,$_GET 获取$action = 't1';//方法,$_GET 获取include $controller . '.php';echo $action();
も可能です

フレームワークには

$controller.'.php';

$controller = 'test';
echo $action();

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。