質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Zend Framework

Zend Frameworkは、PHP5で記述されたWebアプリケーションフレームワークです。Zend Frameworkには守らなければならない開発の規定というものは存在せず、MVCなどの複数のコンポーネントを提供しています。

Q&A

解決済

1回答

6679閲覧

MVCのコントローラーってどうやって動いてるのですか?

poooooo

総合スコア125

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Zend Framework

Zend Frameworkは、PHP5で記述されたWebアプリケーションフレームワークです。Zend Frameworkには守らなければならない開発の規定というものは存在せず、MVCなどの複数のコンポーネントを提供しています。

1グッド

1クリップ

投稿2016/07/05 09:07

他人がZendFrameworkを使って作ったプログラムを見ていますが、
Controllerがどのように動いているのかよくわかりません。

コンストラクトされていない(?)のに、中にあるメソッド(indexAction)が機能しているのはなぜなのでしょうか?

仕組みを教えてください。

search_search👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ZendFramworkに限らない、ざっくりとしたWebフレームワークの説明をさせてもらいます。

まずApache等で、どんなURLでも特定のphpへのアクセスへ書き換える手法を使い、フレームワークの入り口となるphpへアクセスを誘導します。仮にこのphpファイルをindex.phpとします。

そこへ例えば以下のようなアクセスがあったとします。
http://localhost/sample/proc

index.phpにはREQUEST_URIとして上記URLが渡されます。
そして、これをindex.php上で分解します。

http://localhost ベース
sample コントローラ
proc アクション

そして、index.phpは該当のコントローラを生成、該当のメソッドを呼び出すようになっています。

PHP

1$className = "sample" . "Controller"; // クラス名にはControllerと付いている前提 2$method = "proc" . "Action"; // メソッド名にはActionと付いている前提 3$controller = new $className(); 4$controller->$method();

これでSampleControllerのprocActionメソッドが呼びだされます。
このように、コントローラクラスとアクションメソッドを定義したファイルだけ作っておけば、URLから勝手に該当クラスのメソッドが呼ばれるようになっているのです。

すごいおおざっぱに書きましたが、多くのPHPのWebフレームワークはこのような流れになっています。本当の動作は各フレームワークのソースコードを目で追ってみるとよいでしょう。

  • URLに関わらず、入り口になるphpファイルへアクセスが来る
  • URLをクラス名、アクション名、パラメータ等に分解する
  • 上記情報をもとにコントローラクラスを生成、アクションメソッドをパラメータ付きで呼び出す

投稿2016/07/05 09:21

編集2016/07/05 09:24
masaya_ohashi

総合スコア9206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

harashow1701

2016/07/05 09:24

phpって変数にクラス名を文字列にいれると、new 変数()でインスタンス化できるのですか?phpは詳しくないのですが驚きでした。
masaya_ohashi

2016/07/05 09:28

PHPはリフレクション的処理がめちゃくちゃ簡単で便利です。さらに関数名、クラス名は大文字小文字を無視できるそうなので、これで動くはずです。 [変数でクラス名を指定してnewすることについての記載] http://php.net/manual/ja/language.oop5.basic.php#language.oop5.basic.new [変数でメソッド名を指定して実行することについての記載] http://php.net/manual/ja/functions.variable-functions.php
poooooo

2016/07/05 09:33

とてもわかりやすかったです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問