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

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

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

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

PHP

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

Q&A

解決済

2回答

927閲覧

MVCのコントローラーの生成について

tidavest

総合スコア595

MVC

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

PHP

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

0グッド

0クリップ

投稿2016/07/14 13:44

phpのフレームワークmvcで、以下のようにコントローラー名を生成したとします。

$this->_controller=strtolower(substr(get_class($this),0,-10));
これについての解説をお願いしたいのですが、

まず、$this->_controllerは,_controllerというクラスを呼び戻しているのでしょうか。
それに、strtolower(substr(get_class($this),0,-10))を代入しているということでしょうか。
strtolowerは、メソッドでしょうか。
get_class($this)は、$thisという変数にすでにクラスが格納されていて、それを取得しているということでしょうか。

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

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

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

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

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

guest

回答2

0

そのコードが記述されているControllerクラス名がSampleControllerだとすると
"sample"という文字列を$this->_controllerに入れてると思います。
詳細にいうと
$thisはSampleControllerのインスタンスで
get_class関数はそのクラス名を取得してます。例では"SampleContrller"の文字列を取得してます。
substrで"Controller"という文字を削除して
strtolowerで全体を小文字にしてます。例では"Sample"を"sample"にしてます。

投稿2016/07/14 15:02

kaji

総合スコア648

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

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

tidavest

2016/07/14 15:35

ご回答ありがとうございます。Sampleクラスをsampleクラスに変えて取得しているということでしょうか。もしそうならば、クラス事態変わって、機能も変わるということでしょうか。
kaji

2016/07/14 16:52 編集

>Sampleクラスをsampleクラスに変えて取得しているということでしょうか ちがいます。 そのコードからは$this->_controllerに、そのコードが記述されたクラスのクラス名の文字列が入ってるいうことしかわかりません。 (例では"sample"という文字列) $this->_controllerってのはそのコードがかかれているクラスのprivateのプロパティか 継承元のクラスのprotectedのプロパティだと思いますが、 そこから先はその文字列をつかって フレームワークがいろいろ処理してるのだと思います。 ただ、その部分を見てみないのでどう処理してるかはなんとも言えませんが、 たいていのフレームワークはviewのテンプレファイルのパス取得などに この文字列を使ってると思います。 (例ではtemplates/sample/index.phpとかの"sample"の部分) そのフレームワークは自作ではないと思いますが、 別の誰かがつくったオレオレフレームワークでしょうか? 一つ一つの変数やプロパティを var_dump($this->_controller)とかされながら確認されるのが良いと思います。
guest

0

ベストアンサー

get_class($this)

は、$this つまり、実行されているクラス名を取得しています。

substr($name,0,-10)

echo substr("hogehagemogemoge", 0, -10);

こんなプログラムを実行してみればわかると思いますが、0文字目から(末端から10文字目の前まで)を取得しているでしょう。

strtolower($string)

は、それを全て小文字にしています。

ですから、

$this->_controller に、それを実行しているクラスの末端10文字を切り取っったクラス名を全て小文字で格納している、

ということだと思います。なお、私は今、大変酔っ払っていますので保証しかねます。

投稿2016/07/14 15:04

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2016/07/14 15:08

ああ、kajiさんのをみて、何故10文字なんかわかりました。酔っ払っている私には、-10みたいな謎の処理はキツイです。素直に preg_replace 等で Controller っていう文字を消しますね、私なら。 商業プログラミングで本当に大切なのは、速度よりも寧ろメンテナンス性ですから、説明がなくても他の人が理解できるかどうかの方が重要だと思っていますので。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問