PHPを始めたばかりの開発者です。質問内容は次の2つです。


1.「HTMLとPHPコードを分離」するとデザイナーとの分業に向き、
大規模開発に向かなくなる、と思うのですが、この考えは合ってますでしょうか?

2.「HTMLとPHPコードを分離」しつつ、(VからMを直接参照する)MVCのような感覚で構築できるテンプレートはありますでしょうか?


PHPの開発手法や紹介されるテンプレートを見てみると、
「PHPのコードとHTMLの分離」に主眼を置いているものばかり目につきます。
確かにHTMLとPHPを分離するほうが、見やすくなり、デザイナーとの共同作業に向いていると思います。

その一方で、「PHPコードとHTMLの分離」をしてしまうと、
HTMLの共通部分の抽出が難しくなるのでは?と思います。
例えば、こちらのMVCの図(http://ja.wikipedia.org/wiki/Model_View_Controller
(※Vから直接Mを参照するMVCモデルです。Vから直接Mを参照「しない」MVCモデルではありません。)
のような機能分担でWebシステムを実装しようとした場合、「PHPコードとHTMLの分離」状態では実現が難しく思えます。

どうも、この2つはトレードオフの関係にあるように思えるのですが、間違ってないでしょうか。

回答の条件
  • 1人3回まで
  • 登録:2011/04/28 15:11:56
  • 終了:2011/05/05 15:15:02

回答(8件)

id:pretaroe No.1

pretaroe回答回数531ベストアンサー獲得回数752011/04/28 15:50:04

ポイント17pt

>1.「HTMLとPHPコードを分離」するとデザイナーとの分業に向き、

>大規模開発に向かなくなる、と思うのですが、この考えは合ってますでしょうか?

そんなことはないとしか言えない。

大規模開発なら、なおさら分業できないと辛いです。

なぜ大規模開発に向かないと考えるのかわかりません。

>「PHPコードとHTMLの分離」状態では実現が難しく思えます。

完全に分離することは難しいですので、妥協も必要です。

>2.「HTMLとPHPコードを分離」しつつ、(VからMを直接参照する)MVCのような感覚で構築できるテンプレートはありますでしょうか?

既存のフレームワークを使ってみてください。

PHPフレームワーク入門―CakePHP/Zend Framework/symfony/CodeIgniter対応
掌田 津耶乃
4798022772

id:hogeTaro225

ご回答ありがとうございます。参考になります。

他の方の回答も含めまして、概ねPHPとHTMLを分離しても大丈夫なのかなと思いました。

紹介して頂きました本に、いくつか全くチェックしてないフレームワークがありますので

また目を通してみたいと思います。



>完全に分離することは難しいですので、妥協も必要です。

>なぜ大規模開発に向かないと考えるのかわかりません。

もし時間があれば追加で質問をしたいのですが、

例えば、このページをPHPで作るとします。

するとこのページ内にいくつか共通の部分がありますよね。


・「x 回答者: xxxxx 2011-04-xx xx:xx:xx」で囲まれた部分

・「この回答に返信する □不適切な回答」で囲まれた部分


ここは掲示板(?)なので、PHP等でこの共通部分は出力するしかないのですが、

そうではなくて、もし、ここが普通の静的なページであったとして、同じように共通部分がいくつかあり、

また他のページでも使用する共通のHTMLが含まれていたとします。

これらを共通化したい場合は、やはり

>妥協も必要

のようにPHPコードを入れるという認識で合ってますでしょうか。


あ、あと、PHPからHTMLをツリー(JavaScriptがHTMLを解析する時のような、Compositeみたいな)

状に分解して制御できるようなフレームワークってありませんでしょうか。

(そうか、こういう質問にすれば良かったのかと今気が付きました。)

2011/04/28 23:35:42
id:Galapagos No.2

Galapagos回答回数963ベストアンサー獲得回数892011/04/28 16:41:52

ポイント17pt

1.「HTMLとPHPコードを分離」するとデザイナーとの分業に向き、

大規模開発に向かなくなる、と思うのですが、この考えは合ってますでしょうか?

間違っています。

大規模開発とは、プロジェクトマネージャを頭に、アーキテクト、デザイナー、DBスペシャリスト、ネットワークスペシャリスト、プログラマといった様々な職種のメンバーが集まって開発するものです。各々のメンバーが自分の守備範囲を明らかにするために、設計の段階でコードが分離できなければなりません。


「PHPコードとHTMLの分離」をしてしまうと、

HTMLの共通部分の抽出が難しくなるのでは?

そのご心配には及びません。

基本設計の段階で共通部分が整理され、必要に応じてフレームワークが導入されます。


Model View Controllerでの御懸念についてですが、前述のように基本設計の段階でModelの中の共通モジュールのI/Oインターフェースが定義されます。

ユーザー認証やセッション管理などの必要のないViewであれば、JavaScriptなどの手段によって共通モジュールのI/Oにアクセスするのはよく行われることです。


2.「HTMLとPHPコードを分離」しつつ、(VからMを直接参照する)MVCのような感覚で構築できるテンプレートはありますでしょうか?

テンプレートではなく、要素技術としてのAjaxがそれに当たります。

id:hogeTaro225

ご回答ありがとうございます。

他の方の回答も含めまして、概ねPHPとHTMLを分離しても大丈夫なのかなと思いました。

また大規模開発について大体の流れがわかった気がします。

いくつか分からない点があり、もしよろしければご回答をお願い致します。


>基本設計の段階で共通部分が整理され、必要に応じてフレームワークが導入されます。

共通部分が整理されるという事は、その共通部分は複数のHTMLにて使われるわけですよね。

Ajaxを使えばPHPを使わずに共通部分の使い回しが可能と思います。

でもそうではなくて、Ajaxを使わないで静的なページで共通部分を使い回ししたい場合、

「HTMLとPHPを分離」した状態でうまくする方法(フレームワーク)はありますでしょうか。

また、PHPからHTMLをツリー状に分解して制御できるようなフレームワークってありませんでしょうか。

2011/04/28 23:36:52
id:online_p No.3

online_p回答回数1153ベストアンサー獲得回数592011/04/28 22:24:54

ポイント16pt

phpの中にhtmlを書くのは非常に簡単なものだけですね。メールの定型文とか。

id:hogeTaro225

ご回答ありがとうございます。

やはり分離が一般的なんですね。


もしPHPからHTMLをツリー状に分解して制御できるようなフレームワークご存知でしたら、

追加でご回答をお願い致します。

2011/04/28 23:37:49
id:la-la-land No.4

la-la-land回答回数58ベストアンサー獲得回数62011/04/29 00:36:14

ポイント16pt

Smarty(テンプレートエンジン)とか使うとHTMLの共通部分を外に出せます。

ツリー状については、どのフレームワークでもコントローラーからビューの振り分けができたりするかと思いますが。

id:hogeTaro225

ご回答ありがとうございます。

>Smarty(テンプレートエンジン)とか使うとHTMLの共通部分を外に出せます。

という訳で、Smartyをもう一回チェックしてきました。

確かに共通部分を外に出せるのですが。。。

実は他の開発環境から移ってきた人間でして、まだSmarty以外のフレームワークはほとんど見れてない(いや、Smartyもほとんど見れてない)状態なのですが、でも、どうも共通部分を出す方法に自由度がないと感じるんです。

というか、他にもいろいろ思うんですよね。

(紙面の都合?で、思うところについては他の方の返信に書く、つもりです。)

2011/05/01 00:04:01
id:Galapagos No.5

Galapagos回答回数963ベストアンサー獲得回数892011/04/29 06:27:45

ポイント16pt

「HTMLとPHPを分離」した状態でうまくする方法(フレームワーク)はありますでしょうか。

有名なところではSmartyがあります。


また、PHPからHTMLをツリー状に分解して制御できるようなフレームワークってありませんでしょうか。

申し訳ありませんが、「PHPからHTMLをツリー状に分解して制御」という意味が分かりません。具体的に説明をお願いします。

id:hogeTaro225

ご回答ありがとうございます。

>有名なところではSmartyがあります。

やはり有名ドコロはSmartyなんですね。

いろんな方の回答をみて考たのですが、

その人気のヒミツがわかって来た気がします。


「PHPからHTMLをツリー状に分解して制御」部分ですが、適当表現でスミマセン。。。

例えばJavaScriptでしたらinnerHTMLという関数(ブラウザに制限があるようですが)を使って、どんどんタグをHTMLに追加できますよね。

こういう機能がPHPにもあればなと思いまして。

これがあれば何が嬉しいかと言いますと、例えばAmazonの本の一覧のようなリストが必要な時に、見た目上はHTMLとPHPを分離した状態で、個数があらかじめ決まっていないリストを作る事ができるんじゃないかなと思いまして。


ただ、もうグダグダですが、ツリー状のフレームワークはありますか?という追加の質問はナシにしてください。

2011/05/01 10:18:00
id:ikasmilk No.6

ikasmilk回答回数19ベストアンサー獲得回数02011/04/29 18:38:29

ポイント16pt

その考え、合っています。

同感。

id:hogeTaro225

ご回答ありがとうございます。

同感ということ、書いて頂いてありがたいです。

今回、いろんな方に回答を頂き、いろいろ考え分かった点がありましたので、読む人いるか分かりませんが、この場を借りて勝手にまとめちゃいます。


そもそも今回の疑問の発端は、HTMLにif文とかfor文が無い事でした。

開発言語によってはMVCの全機能をプログラミング言語で書くわけで、当然MVCのVにもif文とかfor文があり、その分自由度が高いわけです。

で、HTMLによるVの世界でも同じ自由度を確保しようとすれば、HTMLにJavaScriptかPHPを加えないといけないワケですが、JavaScriptは環境によってOFFされちゃいますから、PHPをHTMLに混ぜるしかなさそうです。

何でそんな自由度が必要なのかと言うと、Vの自由度を確保しなければ、システムが大規模になった場合に、必要なHTMLのコード量が雪だるま式に膨れ上がっちゃうハズだから。。。

そんなハズなんだけど、何故か世間ではPHPとHTMLの分離が流行っているようなのです。。。


そこで今回気がついたのは、PHPとHTMLを分離し、「変数の設定」「別HTML(別テンプレート)ファイルの読込み」の処理はHTML内に記述を許す、というルールにした場合、問題になるのは

・掲示板や一覧リストなど、事前にタグの数が決まらない場合

・変数名がかぶる場合

というパターンぐらいしか、大きいものはない(仮)という点です。(多分ですが。多少あと何点か置いておいてますが)

で、それなりの数のWebシステムでは、この問題に直面する可能性が小さく(仮)、たとえ直面したとしてもその時だけルールを妥協して処理してまえば十分な事が多いため、デザイナーとの協業、見た目の判りやすさ優先の、PHP・HTML分離にプライオリティがある。。。と考えるとつじつまが合うんですよね。

なので規模も重要ですが、どのようなWebシステムか、という点のがHTML・PHP分離の弱点の表面化に影響するかもしれない。。。

2011/05/01 10:29:07
id:Galapagos No.7

Galapagos回答回数963ベストアンサー獲得回数892011/05/01 18:39:38

ポイント16pt

例えばJavaScriptでしたらinnerHTMLという関数(ブラウザに制限があるようですが)を使って、どんどんタグをHTMLに追加できますよね。

こういう機能がPHPにもあればなと思いまして。

Smartyを使えば簡単に実装できます。

PHPだけでも、それほど難しいコーディングではありません。JavaScript並のコード量で実装できます。


下記の参考書をご紹介しておきます。

速習Webテクニック Smarty動的Webサイト構築入門 (Quick Master of Web Technique)

速習Webテクニック Smarty動的Webサイト構築入門 (Quick Master of Web Technique)

  • 作者: 原 一浩 青木 真 鵜飼 孝陽 川野辺 亮
  • 出版社/メーカー: 技術評論社
  • メディア: 大型本

id:hogeTaro225

度々ご回答ありがとうございます。

そうなんですね。チェックが甘かったです。

また確認したいと思います。

2011/05/01 20:01:51
id:ikasmilk No.8

ikasmilk回答回数19ベストアンサー獲得回数02011/05/03 15:18:57

ポイント16pt

よくそんなことを考えましたね。 すごい!

勉強になります。

id:hogeTaro225

ご回答ありがとうございます。

はい、でも、かなり思い切ったことを書いちゃってますけどね。

(テンプレートの機能を完全には把握できてないですからね。。。)

とりあえずは郷に従い勉強していきたいと思いました。

2011/05/05 00:43:25
  • id:b-wind
    >開発言語によってはMVCの全機能をプログラミング言語で書くわけで、当然MVCのVにもif文とかfor文があり、その分自由度が高いわけです。
    さっするにデスクトップアプリケーションにおけるMVCが念頭にあると思われる。
    Web の分野でつかわれているのはMVCタイプ2(通称)と呼ばれる物なので若干形式が異なる。

    また、Web アプリケーションの特徴の一つとして「Vの自由度を下げる」ことで環境依存を減らせるという点が上げられる。
    自由度を得たければ ActiveX や Flash を使うなり、いくらでも方法は有る。

    >で、HTMLによるVの世界でも同じ自由度を確保しようとすれば、HTMLにJavaScriptかPHPを加えないといけないワケですが、JavaScriptは環境によってOFFされちゃいますから、PHPをHTMLに混ぜるしかなさそうです。
    「環境を指定する事で自由度を上げる」手段がある事をお忘れ無く。
    企業アプリケーション環境においていまだにIE6限定が多いのはこれを行った為でもある。

    あと jQuery とか Ext JS とか互換性を吸収してくれるライブラリを使うと殆ど問題は出ないけどね。
    ここ「はてな」もそうだし、「Google の各種サービス」やら「Facebook」「Twitter」等
    イマドキの殆どのサービスが JavaScript 前提なのが良い例。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません