トップページ⇒php
1001コメント351KB

【PHP】下らねぇ質問はここに書き込みやがれ 26

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/08/07(月) 13:11:50ID:???
PHPに関するくだらねぇ質問用スレです。ここならお前の下らない質問に回答があるかも知れません。

まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレは>>2-10 関連スレは>>4-10 FAQは>>6-10 辺り

◆質問する場合の注意
1. 自分のIDを表示させること。(メール欄に何も記述しないでください)
2. サーバーのOS、WebサーバーとPHPの種類やバージョン等を明記すること。
3. 己の行った操作、変更などを詳しく明記すること。
4. エラーメッセージはそのまま表記すること。「エラーが出ます」では絶対分かりません。
5. 質問者としても態度をわきまえること。
6. 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

◆質問後の注意
・質問者は必ずIDを表示させてください。(メール欄に何も記述しないでください。)
・2回目以降は最初に質問した際のレス番号を名前欄に入れてください。
  (逆に回答者は質問者に対して>>(アンカー)をつけて答えてください。)
・解決しなくても回答をもらった場合はお礼を言う。
  (荒らし、煽りは除く。逆に煽られたときも、無闇に反論せずスルーすべし)

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え。理解できないならムリに使うな。
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0271nobodyさん2006/08/11(金) 12:37:32ID:???
>>270
>>269の質問に対する答えとしては、あってもいいだな
0272nobodyさん2006/08/11(金) 15:53:56ID:???
Cだとコンパイル通らんけどな
0273nobodyさん2006/08/11(金) 16:21:47ID:???
通るだろ
0274nobodyさん2006/08/11(金) 17:20:55ID:???
>>272
エラーでなかったよ
int main(void)
{
char a[] = {1, 2, 3, };
return 0;
}
0275nobodyさん2006/08/11(金) 17:47:27ID:???
>>269
http://jp.php.net/manual/ja/function.array.php
一般的ではないですが、 最後に定義された配列エントリの後に
続くカンマがある場合、 これは有効な構文です。

配列要素を修正した時とかに最後のカンマの消し忘れても
エラーにはならない対応なんだろうけど
一般的じゃないと書かれている以上、消し忘れでない限りは
つけない方が個人的にはいいと思う
02762342006/08/11(金) 18:08:04ID:Pasm0XSV
解決したので、ご報告しておきます。
mb_send_mail($to,subject,$msg,$header)
これの$headerの中に"from:"って書いておかないと、
ヘッダー情報が本文におくられちゃうみたいです。
234でドコモの情報とか書きましたが、上の条件をみたして、携帯に送ったら
至って普通に受け取れました。
沢山レスくれたみなさん、お騒がせしました。
0277nobodyさん2006/08/11(金) 18:43:28ID:???
>>276
>>233のレスのが正解だったわけだ。
言われるまで、$headerにFromアドレスをヘッダ識別子なしで
そのまま格納しちゃってることに気付かなかったよ…
0278nobodyさん2006/08/11(金) 19:25:38ID:???
>>275
$a = array(
  1111111111111,
  2222222222222,
  3333333333333,
);
みたいに行単位で書く場合は最後にもコンマつけられたほうがいいんじゃない?
0279nobodyさん2006/08/11(金) 19:35:45ID:???
好みの問題
0280nobodyさん2006/08/11(金) 19:41:09ID:???
俺見たいに、最後だけ意識的に,を外すようにしてるやつもいれば、付けるやつもいるんだろう。

ただSQL文とかでそれやるとエラーだから、PHP使う上では出来るだけ意識的に外したほうが良いかもな。
0281nobodyさん2006/08/11(金) 20:00:10ID:???
推奨云々で言うなら最終行のカンマは無いのが正しい。
ただ、頻繁に配列内容の変更があるならむしろカンマをつけておいた方がメンテはしやすくなる。
これは
if(式)
 実行文;
っていう1行しかない場合でも、保守性を考慮して
if(式) {
 実行文;
}
と必ず { } をつけるコーディングポリシーに通じる話だと思う。

その辺の兼ね合いを考慮したうえで、後は好みの問題だから好きにすればいい。
0282nobodyさん2006/08/11(金) 21:35:28ID:???
>>278
おいらは値の追加とか削除した際にも最後に,が残らないように

$a = array(
1111111111111
,2222222222222
,3333333333333
);

って書き方してるな。
0283nobodyさん2006/08/11(金) 21:43:56ID:???
コンマって言わないでカンマって言うようにしようよ。
なんかエロくて嫌です><
0284nobodyさん2006/08/11(金) 21:45:38ID:???
>>283
言われて初めて気付いた

俺はカンマ派(どうでもいい
0285nobodyさん2006/08/11(金) 21:59:02ID:256svcAI
すみません。教えてください。
java scriptで自身を500ms周期でリロードするHTMLを書き、
数時間走らせておくと、web serverが重くなります。
web server(httpd)を再起動すると元通り軽くなります。

httpdのconfig設定等でチューニング可能でしょうか?
また、どこらへんを設定すればいいのでしょうか?

環境;
 OS Linux CENT-OS4.3
 web server apach2
 外部公開せずLAN内でのみ使用。クライアントは上記のアクセス1台のみ。
 HTMLで記述
です。よろしくお願いします。
0286nobodyさん2006/08/11(金) 22:00:48ID:???
想像力豊かな思春期の方が居るコンマはここですか?

そんな俺はPHPだけは必ず最後にコンマを付けちゃう派。楽すぎて幸せになれる。
他の言語もみんな同じようになればいいのに。
0287nobodyさん2006/08/11(金) 22:14:54ID:???
>>285
ここはPHPのスレですよ。
0288nobodyさん2006/08/11(金) 22:40:38ID:???
すいません、文字数がある範囲を超えるとその範囲までを切り取って、
「…続く」というのが付け足されるようにしたいんですが、
下のように書いたら、切り取った最後のところに「?」が追加されてしまいます。
マルチバイトの扱いがちゃんとできてないんでしょうけど、
どのように書くのがいいでしょうか?アドバイスよろしくおねがいします

$byte= mb_strlen($str);
if($byte>300){
 $str=mb_substr($str,0,300)."…続く";
}
0289nobodyさん2006/08/11(金) 22:49:45ID:???
>>マルチバイトの扱いがちゃんとできてないんでしょうけど
0290nobodyさん2006/08/11(金) 23:12:10ID:???
>>288
たぶん mbstring.internal_encoding が正しく設定されていない。
それから一応常識だから言っとくけど、PHP(mbstring)で内部エンコーディングSJISは通用しない。
0291nobodyさん2006/08/11(金) 23:18:03ID:???
>>288
mb_strlenで$byteかよ。
やりたいのはmb_strimwidthじゃないの?
mb_strimwidth:「あああ…続く」「aaaaaa…続く」
288の方法:「あああ…続く」「aaa…続く」
0292nobodyさん2006/08/11(金) 23:29:14ID:???
あああぁぁ…いくぅっ
0293nobodyさん2006/08/11(金) 23:44:06ID:???
>>290
>>291
ありがとうございます。
mb_strlenがマルチバイトを2文字として計算してるようなので$byteとかいう変数名にしてしまいました。
ややこしかったですね。
あとphpinfoで調べてみたところmbstring.internal_encodingはno valueになってますね。
これのせいかな、ファイルは全部utf-8で作ってます。

自分のサーバーじゃないんので設定変えたりはできないんですが、
他になにか良い方法があればぜひ…
0294nobodyさん2006/08/12(土) 00:03:14ID:???
おれは0.3mmを「こんまさんみり」と読むから
, は「かんま」と呼ぶようにしてる。
ま、どでもいい事ではある。
0295nobodyさん2006/08/12(土) 00:04:16ID:???
mb_internal_encoding('UTF-8');
0296nobodyさん2006/08/12(土) 00:05:12ID:???
「りみんさまんこ」
0297nobodyさん2006/08/12(土) 00:22:10ID:???
common
カモン
0298nobodyさん2006/08/12(土) 00:41:38ID:???
>>286
元々はPerlが明確に「最後にカンマをつけてOK」を標榜しててPHPはそれを真似しただけ。
0299nobodyさん2006/08/12(土) 00:43:56ID:???
>>293
> mb_strlenがマルチバイトを2文字として計算してるようなので$byteとかいう変数名にしてしまいました。
この時点でmbが正常に動作してないことに気付け。

> 自分のサーバーじゃないんので設定変えたりはできないんですが、
> 他になにか良い方法があればぜひ…
プログラム中でinternal_encodingは設定できる。
mb_strlenの挙動もそうだけど、1度はmb系のリファレンスを読みましょう。
0300nobodyさん2006/08/12(土) 02:44:18ID:???
失礼します。PHP5です。
Win環境でライブラリ(特にGD2)の関数を使用すると
ソースがshift-jisでなきゃうごかんのはphp.iniがおかしいのでしょうか?
激しく既出でしたらスルーしてください。
0301nobodyさん2006/08/12(土) 04:15:24ID:???
そんな不思議仕様は聞いたこと有りません。
0302nobodyさん2006/08/12(土) 08:04:13ID:???
>>295
>>299
ありがとうございます!
ini_set("mbstring.internal_encoding","utf-8");
でいけました
0303nobodyさん2006/08/12(土) 12:42:05ID:???
オレはマンコ派
0304nobodyさん2006/08/12(土) 12:49:27ID:???
phpってsetter、getter必要なんでしょうか?
連想配列でもいい気がするんですが、どうなんでしょうか。
0305nobodyさん2006/08/12(土) 12:53:44ID:???
getter setterと連想配列は全然違うわけだが
0306nobodyさん2006/08/12(土) 12:57:12ID:???
たとえば、Dto(vo) では、データのみを保持しますが、
この場合もJava同様getter, setterを作る方法がスマートなんでしょうか?
連想配列の方が楽な気がするんですよね。
どうなんだろう。
0307nobodyさん2006/08/12(土) 13:05:10ID:???
Javaでgetter、setterを使っていたのは何のためだったんだい?
0308nobodyさん2006/08/12(土) 13:08:08ID:???
そういう作成方法だからという理由でした。

getter、setterごとに制御を入れるってことも滅多になかったもので。
DBのカラム名、画面の部品名称が変わるたびに、変数やメソッドの名前が変更になるので
すごい面倒だとJavaのときも感じていました。

実際、getter、setterを使っていて得したってことはなかったです。
痛い目にあっていないだけからかもしれませんが。
0309nobodyさん2006/08/12(土) 13:42:36ID:???
その疑問があるなら、むしろjavaのスレッドとかコミュニティに
勇気を出して聞いたほうがいいぞ
とてつもなく、罵倒される可能性もあるが
0310nobodyさん2006/08/12(土) 13:49:37ID:???
>>309 ということは、309さんはgetter,setterを使っているんでしょうか。

連想配列があるPHPでも実装する利点ってどこにあるのでしょうか?
0311nobodyさん2006/08/12(土) 13:52:48ID:???
人がやれといえば、何でもやるのか?
その辺を吟味し、自分なりの方法を確立していくのも
プログラムを書いていく上で必要なことだと思うが。
0312nobodyさん2006/08/12(土) 13:57:54ID:???
>>311

いやたぶん自分なりの方法を確立すると大変なことになります。
だから、デザインパターンなんてものがあるんだし。

ここ人が少ないんですね。
レスが少なくてむなしいw
0313nobodyさん2006/08/12(土) 14:04:48ID:???
>>312=304?
質問するなら>>1読んで、ID表示くらい守ってくれんかね。
0314nobodyさん2006/08/12(土) 14:05:12ID:???
private 定義がない PHP4においては、setter、getter の意味は
勧告程度しかない
ようは、setter、getter が定義されていないプロパティに関しては
外部からアクセスするなというルール作りでしかない
一人で、作っているときはそれで問題ないかもしらないが、
複数人で使いまわす処理なんかを作ると、一時領域に使っている
プロパティを勝手に書き換えられて、後の動作がうまく動かなく
なるということは良く起こる
これが一つの理由
0315nobodyさん2006/08/12(土) 14:05:24ID:???
もう一つは、setter、getter 経由でアクセスしていれば、仕様変更時に
setter、getter 内の変更だけですむ可能性がある

これらの理由は、連想配列があろうがなかろうが関係ない

別の使い方としては、連想配列へのアクセスのためのヘルパーメソッド
として使う程度だろう
0316nobodyさん2006/08/12(土) 14:05:59ID:???
WebProg番1のスレ速度なわけだが
0317nobodyさん2006/08/12(土) 14:10:30ID:???
一人で、作っているときはそれで問題ないかもしらないが、
複数人で使いまわす処理なんかを作ると、一時領域に使っている
プロパティを勝手に書き換えられて、後の動作がうまく動かなく
なるということは良く起こる

プロパティ(変数?)を勝手に書き換えられてってありますが、
privateにすれば勝手に書き換えられることはないですよね。

Java板で質問したところ、すごいきっちりとした納得できる内容の
返信をもらいましたので、追記します。
0318nobodyさん2006/08/12(土) 14:12:17ID:???
●Java板からの返信。回答者さんありがとうございます。

本来はカプセル化のためだし、
getterやsetterにいろいろ仕込む手法もあったのだけど、
最近の流れはそうではないよね。

でも当初の思想がそうだったために、各種開発ツールや
ライブラリやカスタムタグがgetter/setterありきで設計されている。

ってとこが現実かな。

変数名とメソッド名を合わせて変更は、IDEが対応しているでしょ。
データを保持するだけの単純なJavaBeanは手書きするもんじゃないよ。


--
個人的にすごい納得できる内容でした。
0319nobodyさん2006/08/12(土) 14:42:23ID:???
正直、その答えで納得できる人間がなぜ、今まで悩んでいたのかが
理解に苦しむ

>privateにすれば勝手に書き換えられることはないですよね
まあ、別に変更可能なメンバ変数は public で
それ以外は private って使い方でもいいけど
0320nobodyさん2006/08/12(土) 16:06:12ID:???
httpsのページにPOSTで送信したいんですが
そういう関数どこかにないですか?
0321nobodyさん2006/08/12(土) 16:21:09ID:???
標準の関数はない。PEARライブラリ使うか自作。
0322nobodyさん2006/08/12(土) 16:37:42ID:???
>>321
うまく作れないんですが
どこかにサンプルないですか?
0323nobodyさん2006/08/12(土) 16:50:08ID:???
自己解決しました
0324nobodyさん2006/08/12(土) 18:39:39ID:???
>>319
> 正直、その答えで納得できる人間がなぜ、今まで悩んでいたのかが
> 理解に苦しむ
おそらく単に>>318みたいな答が欲しかったってだけの話だろ。
特に「本来は〜だけど、当初の思想が〜」のように「仕方なく使わざるを得ないだけ」みたいな言葉を待っていたって感じ。

俺はsetterとgetterは依然カプセル化に重要な役割を果たしてると思うけどね。
たとえばあるプロパティをpublicにするとどんな値にでも変更し得るけど、setterが毎回呼び出されるなら不正なデータや範囲外のものをチェックしたり修正したりと、整合性をとるのが容易になる。>>315の「仕様変更時に一箇所の変更ですむ」、という話につながる。

setterだけでもプロパティに代入されるものの整合性を保つことはできるけど、そのプロパティをsetすることのほうが多いのかgetすることのほうが多いのかによって、setter/getterの処理の重さを調節することもできる。

まあ、そんなこと考えずにガムシャラに動くものを作れば良いっていう今時の風潮からすれば、俺の言ってることも古い考えってことになるのかねぇ?
0325nobodyさん2006/08/12(土) 19:06:56ID:???
>>324
みんなどこぞの解説書によくあいてあるようなことを言うが

ちなみに俺の実務経験上では、データのみを保持するオブジェクトDTOなどにsetter,getterごとに範囲チェック処理などを入れることはまずナイ。
エラーチェックはエラーチェックで別の処理で行っている。

Javaの基本概念として、setter,getter使っているってことがホトンドだろう。
場所によりけりだけど。
0326nobodyさん2006/08/12(土) 19:35:08ID:???
まずデザパタありき、まずgetter/setterありき、みたいな思考停止はダメだろ。
それらの方法論の良い悪いではなく、自分で取捨選択・応用する頭を持たなきゃ、プログラマーではなく、ただのタイピストだ。
0327nobodyさん2006/08/12(土) 19:59:25ID:???
>>325
DTOの内部でエラーチェックetcをしないのは、オブザーバパターンなりコントローラなり、より広い範囲での例外処理のほうが有用だからってだけでは?
似た処理はなるべく同じところに書いたり隠蔽したほうがいい(=カプセル化)ってのはどういうレベルで見ても一緒だし、setterの目的が基本概念として、っていうだけだったら、publicじゃダメな理由がなくなってくる。
0328【閑話休題】2006/08/12(土) 20:14:04ID:???
実際のとこ、setterでチェックすることもまず無ければ、仕様変更をsetter/getterで吸収することもまず無くね?
全く無いとは言わないが、相当なレアケースだと思うんだよね。

前者はsetterでやるより入力段階などで処理した方がパフォーマンス上がるしエラー時処理の融通も利かせやすい。
ユーザからの入力処理以外でエラーチェックを行う必要性そのものがまず無いし。無闇に毎回チェックは無駄もいいとこ。
後者は現実問題として、仕様変更入った場合はsetter/getterのメソッド自体を組み直す羽目になるケースが多く、
結局呼び出し元も含めて修正せざるをえないことの方が多い。I/F仕様と中身の実装が食い違ってると後で混乱を招くし。
setter/getterで一括処置できるのは非常に些細なレベルの修正でしかなくて、そのためにメソッドを用意するのは手間の方が大きい。

結局、現時点でsetter/getterを使うメリットって「隣に座っているプログラマがまるで信用できない」場合くらいのもので、
それをコーディング規約やコードレビューやテストなどの事前のチェックでなく、実行時の処理でリアルタイムにチェックしようって
発想そのものが根本的に間違ってると俺は思うんだよな。プログラマの至らなさをユーザに不便として押し付けてるだけ。
大体、メソッドの使い方自体が間違ってるのを実行時に判定できたとして、それでどうフォローすんの?って感じ。
そんなレベルでこけてるってことはロジック全体も含めてそのプログラムは信用ならんわけで、まともに使い物にならんじゃん。
コアダンプみたいにデバッグ情報吐き出させるか、適当にごまかして動いてるように見せかけるか、そのくらいしかできないでしょ。
デバッグ中にはメリットもあると思うが、そんな動的チェックは納品時には外して欲しいもんだと俺は思うよ。
ひょっとすると中にはデバッグ用/納品用でsetter/getterを交換してるようなとこもあるかもしれんけど、まずやらんよね。

関数プロトタイプやデバッグシンボル付きコンパイルとかの仕組みに比べるとsetter/getterの考え方はイマイチだと俺は思うなー。
0329nobodyさん2006/08/12(土) 21:40:56ID:???
> それをコーディング規約やコードレビューやテストなどの事前のチェックでなく、実行時の処理でリアルタイムにチェックしようって
> 発想そのものが根本的に間違ってると俺は思うんだよな。プログラマの至らなさをユーザに不便として押し付けてるだけ。

コーディングは下流工程だし。
いかに至らないプログラマを効率良く使えるかってのは問題じゃん。

昔GCを自動化しようって流れが出てきたときにも似たようなこと言う奴はいた。
メモリ管理くらいプログラマならできて当然、とか言ってね。
今やメモリ管理を自分でやることほどアホな作業はない罠。
0330nobodyさん2006/08/12(土) 21:49:49ID:???
>>329
getter/setterとGCの話は全然別問題だろ
0331nobodyさん2006/08/12(土) 21:57:55ID:???
>>329
それは思いっきり実行時の高度で複雑な処理の話だしなー。
高級言語開発がいいかアセンブラ開発がいいかという議論と同レベル。
OS通さずに低レベルI/FでファイルI/Oや画面表示しようとかいうのと一緒

setter/getterの論議は設計図通りに作れない手抜き工事者がそこらにうようよしてるから、
建物の安全対策は建築時には考えずに監視員雇って定期的に見張らせよう、って話じゃね?
昨今のビルやプールでのトラブル続出を見てるとこれも現実的な選択だろう、ってことだろ。
0332nobodyさん2006/08/12(土) 22:08:57ID:???
>それをコーディング規約やコードレビューやテストなどの事前のチェックでなく
別にいらないのなら、やらなくてもいいとは思うけど
現実的にそう主張して、仕事が上手くいっているのなら問題ないと思う
0333nobodyさん2006/08/12(土) 22:16:27ID:???
実際にメソッドI/Fを間違ってバグ出しまくってるやつって、おまいらの会社にどのくらいいるもんなの?
0334nobodyさん2006/08/12(土) 22:31:24ID:???
>メソッドI/Fを間違って
ってどういう状況?
使い方が間違っているってこと?
0335nobodyさん2006/08/12(土) 22:37:09ID:???
あ、間違えた。setter/getterを用意しなかったらメンバ変数の扱い方を間違ったやつ、だね。
0336nobodyさん2006/08/13(日) 00:13:38ID:???
あんたらまだその話してたの。
0337nobodyさん2006/08/13(日) 00:33:32ID:???
うん。
0338nobodyさん2006/08/13(日) 01:22:57ID:???
simpleXMLで要素や属性を追加しようとして、
addChildとかを使用するつもりだったんですが、
自分のレン鯖のPHPは5.1.2でそれらのメソッドが使えないことに気づきました。

DOM/XMLの設定もenabledになってるようです。
できればsimpleXMLで実現したいんですが、
何か良い方法はあるでしょうか、どなたかアドバイスおねがいします。
0339nobodyさん2006/08/13(日) 01:59:28ID:???
PHPと関係ない技術討論はよそでやれ
0340nobodyさん2006/08/13(日) 02:18:32ID:???
この話ってPHPでクラス設計をやる場合にもsetter/getterでいくべきなのか?って話じゃなかったのか。
0341nobodyさん2006/08/13(日) 02:36:55ID:???
>>338
使える鯖に引っ越す
0342nobodyさん2006/08/13(日) 02:39:38ID:???
8割の住人がいい加減にしろと思っていると出ました
0343nobodyさん2006/08/13(日) 07:38:43ID:???
>>338
管理者に言えば対応してくれるかも知らん
0344nobodyさん2006/08/13(日) 11:39:02ID:6zieGLC5
DOMNodeクラスのappendChildメソッドのような、XMLの子要素群の末尾に子ノードを追加する処理では無く、子要素群の先頭に新規ノードを追加する処理はどう行えばいいのでしょうか。
0345nobodyさん2006/08/13(日) 13:50:16ID:???
foreach で 連想配列に格納されている 文字列に関連づいている要素( [ 'abc' ] など ) と、
数字に関連づいている要素( abc[1] など ) の数を別々にカウントしたり、取り出す方法ってないんでしょうか?
0346nobodyさん2006/08/13(日) 13:51:51ID:???
ループ内で条件分岐させてカウントしていけばいいんじゃない?
0347nobodyさん2006/08/13(日) 14:13:46ID:???
うーむ もっとすっきりした方法ないんですかね。。
0348nobodyさん2006/08/13(日) 14:33:56ID:???
>>347
取り出す方法を模索してもいいと思うけど
文字列と数字(内部的には全部文字列だが)のキーが混合になる
連想配列が本当に必要か、取得しやすい配列構成に変えるとか、
そっちを考えてすっきりさせた方がいいんじゃね
0349nobodyさん2006/08/13(日) 14:41:19ID:???
いや PHPでDBから取得すると自動的にそうなるんですよね。
便利だしなぁ
0350nobodyさん2006/08/13(日) 14:42:05ID:???
PDO関数使ってどっちかに固定しろ
0351nobodyさん2006/08/13(日) 14:52:08ID:???
>>349
DBならfetchの方法変えるだけで文字列・数字どっちで取るか固定できる
マニュアル嫁
0352nobodyさん2006/08/13(日) 14:54:15ID:???
情報後出しすんなよ
0353nobodyさん2006/08/13(日) 15:41:37ID:???
便利だしなぁ  > 2つとれると便利だから使ってるってだけ
fetchでかえられることぐらいしっとるわw
0354nobodyさん2006/08/13(日) 15:44:05ID:???
>>353
場面に応じた取捨選択も出来んヤツが知っとっても意味が無い
0355nobodyさん2006/08/13(日) 16:05:19ID:???
PHPから、HTMLレイアウトコードを吐き出すプログラムを作る場合、HTMLデータはどうやって保持してますか?
それとも、PHPで吐き出すのはやらないんですかね。
0356nobodyさん2006/08/13(日) 16:12:02ID:???
HTMLレイアウコードってのがどういう特別なものなのかわからんが、
所詮テキストだろうから普通に出力すればいいべ
0357nobodyさん2006/08/13(日) 16:19:07ID:???
決まったレイアウトを吐き出す共通クラスが作りたいなと思って。

HTMLレイアウトコードを文字列としてPHPクラスに保持しておく場合、改行コード付にしなければ
吐き出した後のソースが汚くなるんですよね。毎回付加するのも見にくい(?)し。
やっぱり別ファイルにHTMLを書いて、それをincludeしてあげるクラスがいいのかな。

ある共通化されたテーブルレイアウトの中に値を書きたい場合は、開始用、終了用のメソッドを作って、
それぞれ別ファイルを作って・・・って面倒でなんか汚いですね。

HTMLのレイアウト情報の共通化ってどうやっているんだろう・・・・?
0358nobodyさん2006/08/13(日) 16:24:30ID:???
もの凄く不細工な感じがするのですがスマートに出来る関数はありますでしょうか?

$uri = $_SERVER['REQUEST_URI'];
echo substr($uri,$p+1,strlen($uri)-strrpos($uri,'/'))
0359nobodyさん2006/08/13(日) 16:24:32ID:???
>>357
テンプレートライブラリのことか?
0360nobodyさん2006/08/13(日) 16:25:20ID:???
>>359

そういうことです。smartyとか参考にすればいいんでしょうか?
0361nobodyさん2006/08/13(日) 16:26:17ID:???
いまいち何で悩んでるのか具体的にわからん
大枠のテンプレートとなるレイアウトページから
各ページで変化する個別のコンテンツ部分は
includeなりなんなりで読み込むってのは割と常套なやり方だと思うが
0362nobodyさん2006/08/13(日) 16:26:28ID:???
>>360
素直にSmarty使えばいいと思う

ライブラリを書きたいというなら参考にすればいいだろうし
0363nobodyさん2006/08/13(日) 16:26:57ID:???
>>355
「HTMLレイアウトコード」って用語を聞いたことないんだけど、
一般的な用語なの?
ググってもヒットしないんだけど。
http://www.google.co.jp/search?q=%22HTML%E3%83%AC%E3%82%A4%E3%82%A2%E3%82%A6%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89%22

なんとなくテンプレートエンジン作ろうとしてる気はするけど。
0364nobodyさん2006/08/13(日) 16:30:40ID:???
>>358
echo basename($_SERVER['REQUEST_URI']);
か?
0365nobodyさん2006/08/13(日) 16:31:43ID:???
>>358
$pてなんだ
0366nobodyさん2006/08/13(日) 16:41:48ID:???
>>364-365
dirnameの方でした、ありがとうございます
0367nobodyさん2006/08/13(日) 16:43:42ID:???

1 <table ...>
2 <tr ...>
3 <td ...>
4
5 // ページごとにレイアウトを記述
6
7 </td>
8 </tr>
9 </table>

大雑把に書くと、1〜3行 が新テーブルの開始タグ、 7〜9が新テーブルの終了タグとして
使えたら便利だなぁって思ってます。

そうすると↓のように便利になるかなと。

1 <?PHP Layout::A( パラメータ(任意) ); ?>
2
3 // ページごとにレイアウトを記述
4
5 <?PHP Layout::_A(); ?>

こういう共通化ってどうやってますか?
0368nobodyさん2006/08/13(日) 16:54:21ID:???
>>367
HTML的に見たらテーブルでレイアウトするテンプレートエンジンなんか存在価値無いだろう
0369nobodyさん2006/08/13(日) 17:05:16ID:???
>>367
ページのヘッダ・フッタのレイアウトの意味合いじゃなくて
テーブル単位(<table>〜</table>)でって意味合いで言ってるなら
それ全然便利じゃないぜごちゃごちゃするだけだ
そこは普通にtableタグ書きゃいい
0370nobodyさん2006/08/13(日) 17:06:40ID:???
調べたらカスタムタグっていうやつだった。
テーブルに限らずいろいろ定義して使えるようなものね。
>>368 存在価値ありましたね。

PHPで作っている人いたので流用させてもらうことにしました。
■ このスレッドは過去ログ倉庫に格納されています