マンガでよめる痔のこと・薬のこと

具体的には、
テンプレートエンジン ⇒ Smarty
フレームワーク ⇒ cakePHP
を使えるようになりたいのですが、
どちらを先に学ぶべきでしょうか。

PHP自体、現在勉強中なのですが、
一通りわかってきたので、次のステップに移ろうと思い迷っております。

よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

Smarty


1日もあれば扱えます
改めて勉強する というレベルのものでも無いでしょう
単純置換の方法、if、foreach が分かれば十分に用をなします
Smartyはテンプレートエンジンのくせにできることが多すぎてビジネスロジックを埋め込むことができてしまうので、純粋なテンプレートエンジンとして扱うには、それ以外のSmarty用のコマンドや使い方を覚えても、本来のテンプレートエンジンとしての意味が薄らぎます

cakePHP
フレームワーク初心者が扱えるかどうかは定かではありませんが、比較的理解しやすいものかと思いますが、どんなフレームワークでもwebサーバーの構築apacheの細かな設定方法、DBの扱い方等の基本概念を理解しており一通り作業可能であることが前提にあります。
また、cakePHPはテンプレートエンジンを用いていません。
テンプレートとなりうるHTML内に <?php echo $data ?>
などのようにして埋め込んでいくタイプです。
SmartyをcakePHPのテンプレートエンジンとして扱うことも可能ですが、覚えることが多くなるだけです。


いずれにせよ、classの概念、Object指向の概念を知らないと意味がわかりません
手続き型でしかプログラムを書けないのであれば、まずはクラスとオブジェクトについて学ぶ必要があります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
返事が遅くなり申し訳ございません。

Coldfusionは1年半業務で使用していたのですが、IISオンリー、SQLserverオンリーだったので、apacheやMySQLなどの知識も必要ですね。

クラスとオブジェクトについても、もっと調べてみようと思います。

ありがとうございました。

お礼日時:2007/12/25 22:03

smartyを先に知っておく必要があります。


デザイナ側・テンプレート側両方扱えた方が良いでしょう。
時間に余裕があればsmartyの内部ソースもある程度知っておくと なお良いです。

>PHP自体、現在勉強中なのですが、
>一通りわかってきたので、次のステップに移ろうと思い迷っております。
PHP脱初心者→デザインパターンと言う順序は間違ってはいないですが
オブジェクト指向とはなんぞ、と言うことを熟知しておく必要があります。
classを自在に扱えるレベルであれば問題ないですが、そうでない場合は
・隠匿
・継承
・多態性
について一度調べることをお勧めします。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
返事が遅くなり申し訳ございません。

オブジェクト指向。確かに必要そうですね。
Coldfusionは業務で1年半くらい使用していたのですが、
オブジェクト指向はあまり詳しくないのです。

実はRubyも面白そうと思い、ちょっと勉強してRuby on Railsで簡単なWEBアプリケーションを作ってみたのですが、
やっぱりPHPが先かなと思いPHPを勉強中です。

・隠匿
・継承
・多態性
について調べてみます。

ありがとうございました。

お礼日時:2007/12/25 21:59

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QPHPフレームワーク環境でのSmartyの必要性

PHP でシステムを開発する際ですが、恐らく何かしらのフレームワークを利用した場合は大半だと思います。そう言った時にテンプレートエンジンの Smarty を合わせて利用するかどうか意見が別れる時があります。

PHP でフレームワークが今ほど使われていなかった大昔は、素の PHP 実装 + Smarty で、ロジックとテンプレートを分離する流れがありました。
しかし、現在利用されるほとんどのフレームワークでは当たり前のように MVC の思想で構成されており、ロジックとテンプレートは初めから分離されています。

そう言った状況の中、Smarty を各フレームワークと連携してテンプレートエンジンとして利用する必要がどれほどあるのか、判断に苦しみます。

皆さんはどう考えるでしょうか?

Aベストアンサー

そもそも、CakeやZend Framework、Fuelなどほとんどのフレームワークが、設計コンセプトにおいて、Smartyの存在を無視している以上、あえて過去の遺物を引きずる必要はないです。
Smartyはテンプレートエンジンですらない、単なるタグパーサであり、モダン・フレームワークのアーキテクチャに合いません。
最新のMVCであるLaravelなどは、自前でBladeというテンプレートエンジンを装備していますし、WordpressのようなCNSでもSmartyは用なしです。

Smartyを採用したがるのは、開発をレガシーphpの手法に引き戻して、何とか仕事を自分たちの手の届く範囲に止めたい、オールドデベロッパーの悪アガキに思えます。

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

Qonchangeイベントを強制的に発生させる

お世話になります。
onchangeイベントをjavascriptで強制的に動作させたいと思っております。

発生させたい場合
・ユーザーがtextボックスを入力
・リンクボタンを押下した場合

簡単なことなのかもしれませんが、
ご教授よろしくお願いいたします。


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<script type="text/javascript">

function change(){
alert('test');
}

function update(){
document.getElementById('1').value = "update";
document.getElementById('1').onchange = change;
}


</script>

<input id="1" type="text" value="1" onchange="change();">

<a href="javascript:update();">update</a>

お世話になります。
onchangeイベントをjavascriptで強制的に動作させたいと思っております。

発生させたい場合
・ユーザーがtextボックスを入力
・リンクボタンを押下した場合

簡単なことなのかもしれませんが、
ご教授よろしくお願いいたします。


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<script type="text/javascript">

function change(){
alert('test');
}

function update(){
document.getElementById('1').value = "update";
document.getElementById('1').onchan...続きを読む

Aベストアンサー

回答は出てますが・・・onchangeにこだわるなら、

document.getElementById('***').onchange();

()を付ければ呼び出せます。(Windows FireFox2、Opera8で確認)


var f = document.getElementById('***').onchange;
f();

IE6の場合はいったん変数に代入する必要があるようです。

Qpingでポートの指定

pingでIPアドレスを指定して、通信できるかどうかというのは
よく使いますが、pingでポートを指定して応答するかどうかは調べられるのでしょうか?

よろしくお願いします

Aベストアンサー

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含むICMP)ではできません。

FTPの疎通確認であれば、クライアントからサーバに対するTCP/21通信(FTP-CMD)が可能であること(サーバからクライアントへのTCP/21からの応答を含む)+サーバからクライアントに対するTCP/20通信(FTP-DATA)が可能であること(クライアントからサーバへのTCP/21からの応答を含む)が必要でしょう。

監視ソフトによるものであれば、
・クライアントからサーバへのログイン(TCP/21)
・クライアントからサーバへのlsの結果(TCP/20)
で確認すればよいでしょう。

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含む...続きを読む


人気Q&Aランキング