- ベストアンサー
PHPで送信された値は、すぐ変数に入れるものなの?
- PHPで送信された値を変数に入れる際の適切な方法について質問しています。おかしな値のチェックやリピート処理についても尋ねています。
- PHPでテキストエリアに出力するプログラムの書き方について質問しています。長いプログラムの場合、わかりやすくするためにサブルーチンを作るべきかどうかも考えています。
- PHPでテキストエリアの出力用のサブルーチンをどこに置くべきかについて質問しています。別ファイルにするか、HTMLのどの位置に書くかなどを尋ねています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> <?php > $hogeTags = createHogeTags(); > ?> > <?php > function createHogeTags() { > return "hogehoge"; > } > <html><body> > <textarea name="iroiro" rows="20" cols="50"> > <?php echo $hogeTags; ?> > </textarea><br></body></html> > > という書き方にならない理由は何故でしょうか? > > 関数は、</html>よりも下に書くものなのでしょうか? まず初めに、</html>よりも下に書くという決まりはありません。 私の個人的な好き嫌いに過ぎません。 次に、上記のようにならない理由は、ロジックが重要なのではなく 出力内容が重要である為、ロジック部は末尾に置いています。 具体的なロジックは、出力が誤っている情報(変数)がその関数で あることが確定した後にデバッグされるべきものだと考えている からです。 はっきり言うと、見る必要もない部分を目にしてしまうのは邪魔です。 >「HTMLタグの直下に書いてPHPの終了タグは書きません」 > >の > >「PHPの終了タグは書きません」とは、?>を書かないということですか? ファイルの最後にのみ、?>は書きません。 ?>の後に改行などがあるとHTMLとして認識し、処理されてしまう為です。 余計な労力を使ってしまうかもしれないことが稀に起きます。
その他の回答 (3)
- okbakabaka
- ベストアンサー率30% (22/73)
1. とりうえずPHP5.3系(だったと思う)からは未定義に変数に対してエラー(Notice: Undefined index:)が出るようになっている まず$_POSTの中身がどうなっているのかのチェックが必須。 だからいきなり変数に突っ込むのはNG。 if(isset($_POST['a'])){ $a = $_POST['a']; }else{ $a = ""; } などの処理が必要。 is_numericの処理などはその後に変数$aに対して行います。 $_POSTはPHPのシステムが用意しているスーパーグローバルなので >$_POST["a"]=1 こんな使い方はしてはいけません。 ここら辺の事を今までの回答者が書いてないのが怖い。 2. 自分自身は普段からテンプレートエンジン(俺自身はSmartyをよく使用している)を利用して最低限システムとデザインは切り離しています。 そうすることによってデザイン変更作業が容易にしています。 結果として質問者のような無駄に関数を呼ぶとかの必要性はない状態。 3. あえてその方法で書くなら別ファイル化しておく。 それと俺自身は関数は使わない。クラスにする。
お礼
回答ありがとうございました。 さすがに、$_POST["a"]=1という書き方は普通じゃないなと思いました。 テンプレートエンジンはよく耳にするので、これから学んでみますね。
- notnot
- ベストアンサー率47% (4900/10359)
1. すぐでなくても良いですが、チェックして結果によって値を書き換えるなら、別の変数に入れた方が良いです。$_POST["a"] も書き換え可能ですが、あくまでポストされたパラメータという意味なのでそのままにする。 書き換えない場合はそのままでも良いですが、あとでやっぱり書き換えることにした場合に、上記の考えに立つなら、あちこちの$_POST["b"] を書き換えて回ることになるので、やはり、変数に代入した方が良いでしょうね。 2. それで良いと思います。 私なら、事前に変数に入れておいて、 <textarea name="iroiro" rows="20" cols="50"> <?php for($i=0; $i<$n; $i++) { echo $textdata[$i]."\n"; } ?> </textarea><br> とか。 3. 積極的な理由が無ければ別ファイルにはしないでしょうね。 場所は、自分でルールを作ればどこでもいいと思いますが、前の方が良いんじゃないかな。 >(というのも、参考にしているテキストが、HTMLとPHPが混ぜこぜになっていて、規模が 大きくなると、読みにくくなると思うからです) 規模が大きいと、フレームワークを使ったて処理部分と表示部分を分離すると思います。まあ、フレームワーク使うなら何故PHPを使うの?という気もしますが。
お礼
回答ありがとうございます。 さすがに、$_POST系の変数にプログラム内で値を入れるのは、普通じゃないなと思いました。変数を用意することにします。 あらかじめ変数を作成しておけば、展開するだけなので、コードもすっきりしますね。
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
問1 プレーンなPHPコードならしますが、全てにおいてそうはしません。 デコードしたりする場合は、その結果を変数に格納して、 その変数に対してチェックしたりもします。 問2 1ファイル内でやるという制約なら、あくまでもロジックは 全て先に済ませ、次にHTMLを出力させる書き方をします。 <?php $hogeTags = createHogeTags(); ?> <html><body> <textarea name="iroiro" rows="20" cols="50"> <?php echo $hogeTags; ?> </textarea><br></body></html> <?php function createHogeTags() { return "hogehoge"; } もしくはCakePHPなどのフレームワークを利用する。 作業者や時間、上司がOSSを気に食わない諸々の条件下では、 要件を満たせるだけの最低限のMVCモデルの俺俺フレームワークを作ります。 問3 1ファイル内でやる制約なら、HTMLタグの直下に書いてPHPの終了タグは書きません。 簡易フレームワークを作るなら、特定ファイル名のアクションクラスなどを自動的に インスタンス化させる作りを構築し、自動的に読み込ませるファイル上に記します。 大抵、MVCモデルを採用しているフレームワークのアクションコントローラー内に記します。
お礼
毎回、お世話になっております。 問1については、了解しました。変数に入れたほうがよさそうですね。 問2について、 「ロジックは全て先に済ませ、次にHTMLを出力させる書き方」となっています。 では、 <?php $hogeTags = createHogeTags(); ?> <?php function createHogeTags() { return "hogehoge"; } <html><body> <textarea name="iroiro" rows="20" cols="50"> <?php echo $hogeTags; ?> </textarea><br></body></html> という書き方にならない理由は何故でしょうか? 関数は、</html>よりも下に書くものなのでしょうか? 問3について 「HTMLタグの直下に書いてPHPの終了タグは書きません」 の 「PHPの終了タグは書きません」とは、?>を書かないということですか? <textarea name="iroiro" rows="20" cols="50"> <?php echo $hogeTags; ?> </textarea> というように、HTMLタグの直下に書くなら、終了タグは必要だと思うのですが…。 ご回答いただけるとありがたいです。
お礼
ロジックを先に書いてしまうと、出力部分(HTML)を見るために、スクロールさせないといけませんね。ロジックが長くなれば、それだけ手間がかかるので、納得がいきました。 ご回答に感謝します。