【PHP】下らねぇ質問はここに書き込みやがれ 26
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/08/07(月) 13:11:50ID:???まず読め→【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カテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え。理解できないならムリに使うな。
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0320nobodyさん
2006/08/12(土) 16:06:12ID:???そういう関数どこかにないですか?
0321nobodyさん
2006/08/12(土) 16:21:09ID:???0323nobodyさん
2006/08/12(土) 16:50:08ID:???0324nobodyさん
2006/08/12(土) 18:39:39ID:???> 正直、その答えで納得できる人間がなぜ、今まで悩んでいたのかが
> 理解に苦しむ
おそらく単に>>318みたいな答が欲しかったってだけの話だろ。
特に「本来は〜だけど、当初の思想が〜」のように「仕方なく使わざるを得ないだけ」みたいな言葉を待っていたって感じ。
俺はsetterとgetterは依然カプセル化に重要な役割を果たしてると思うけどね。
たとえばあるプロパティをpublicにするとどんな値にでも変更し得るけど、setterが毎回呼び出されるなら不正なデータや範囲外のものをチェックしたり修正したりと、整合性をとるのが容易になる。>>315の「仕様変更時に一箇所の変更ですむ」、という話につながる。
setterだけでもプロパティに代入されるものの整合性を保つことはできるけど、そのプロパティをsetすることのほうが多いのかgetすることのほうが多いのかによって、setter/getterの処理の重さを調節することもできる。
まあ、そんなこと考えずにガムシャラに動くものを作れば良いっていう今時の風潮からすれば、俺の言ってることも古い考えってことになるのかねぇ?
0325nobodyさん
2006/08/12(土) 19:06:56ID:???みんなどこぞの解説書によくあいてあるようなことを言うが
ちなみに俺の実務経験上では、データのみを保持するオブジェクトDTOなどにsetter,getterごとに範囲チェック処理などを入れることはまずナイ。
エラーチェックはエラーチェックで別の処理で行っている。
Javaの基本概念として、setter,getter使っているってことがホトンドだろう。
場所によりけりだけど。
0326nobodyさん
2006/08/12(土) 19:35:08ID:???それらの方法論の良い悪いではなく、自分で取捨選択・応用する頭を持たなきゃ、プログラマーではなく、ただのタイピストだ。
0327nobodyさん
2006/08/12(土) 19:59:25ID:???DTOの内部でエラーチェックetcをしないのは、オブザーバパターンなりコントローラなり、より広い範囲での例外処理のほうが有用だからってだけでは?
似た処理はなるべく同じところに書いたり隠蔽したほうがいい(=カプセル化)ってのはどういうレベルで見ても一緒だし、setterの目的が基本概念として、っていうだけだったら、publicじゃダメな理由がなくなってくる。
0328【閑話休題】
2006/08/12(土) 20:14:04ID:???全く無いとは言わないが、相当なレアケースだと思うんだよね。
前者はsetterでやるより入力段階などで処理した方がパフォーマンス上がるしエラー時処理の融通も利かせやすい。
ユーザからの入力処理以外でエラーチェックを行う必要性そのものがまず無いし。無闇に毎回チェックは無駄もいいとこ。
後者は現実問題として、仕様変更入った場合はsetter/getterのメソッド自体を組み直す羽目になるケースが多く、
結局呼び出し元も含めて修正せざるをえないことの方が多い。I/F仕様と中身の実装が食い違ってると後で混乱を招くし。
setter/getterで一括処置できるのは非常に些細なレベルの修正でしかなくて、そのためにメソッドを用意するのは手間の方が大きい。
結局、現時点でsetter/getterを使うメリットって「隣に座っているプログラマがまるで信用できない」場合くらいのもので、
それをコーディング規約やコードレビューやテストなどの事前のチェックでなく、実行時の処理でリアルタイムにチェックしようって
発想そのものが根本的に間違ってると俺は思うんだよな。プログラマの至らなさをユーザに不便として押し付けてるだけ。
大体、メソッドの使い方自体が間違ってるのを実行時に判定できたとして、それでどうフォローすんの?って感じ。
そんなレベルでこけてるってことはロジック全体も含めてそのプログラムは信用ならんわけで、まともに使い物にならんじゃん。
コアダンプみたいにデバッグ情報吐き出させるか、適当にごまかして動いてるように見せかけるか、そのくらいしかできないでしょ。
デバッグ中にはメリットもあると思うが、そんな動的チェックは納品時には外して欲しいもんだと俺は思うよ。
ひょっとすると中にはデバッグ用/納品用でsetter/getterを交換してるようなとこもあるかもしれんけど、まずやらんよね。
関数プロトタイプやデバッグシンボル付きコンパイルとかの仕組みに比べるとsetter/getterの考え方はイマイチだと俺は思うなー。
0329nobodyさん
2006/08/12(土) 21:40:56ID:???> 発想そのものが根本的に間違ってると俺は思うんだよな。プログラマの至らなさをユーザに不便として押し付けてるだけ。
コーディングは下流工程だし。
いかに至らないプログラマを効率良く使えるかってのは問題じゃん。
昔GCを自動化しようって流れが出てきたときにも似たようなこと言う奴はいた。
メモリ管理くらいプログラマならできて当然、とか言ってね。
今やメモリ管理を自分でやることほどアホな作業はない罠。
0331nobodyさん
2006/08/12(土) 21:57:55ID:???それは思いっきり実行時の高度で複雑な処理の話だしなー。
高級言語開発がいいかアセンブラ開発がいいかという議論と同レベル。
OS通さずに低レベルI/FでファイルI/Oや画面表示しようとかいうのと一緒
setter/getterの論議は設計図通りに作れない手抜き工事者がそこらにうようよしてるから、
建物の安全対策は建築時には考えずに監視員雇って定期的に見張らせよう、って話じゃね?
昨今のビルやプールでのトラブル続出を見てるとこれも現実的な選択だろう、ってことだろ。
0332nobodyさん
2006/08/12(土) 22:08:57ID:???別にいらないのなら、やらなくてもいいとは思うけど
現実的にそう主張して、仕事が上手くいっているのなら問題ないと思う
0333nobodyさん
2006/08/12(土) 22:16:27ID:???0334nobodyさん
2006/08/12(土) 22:31:24ID:???ってどういう状況?
使い方が間違っているってこと?
0335nobodyさん
2006/08/12(土) 22:37:09ID:???0336nobodyさん
2006/08/13(日) 00:13:38ID:???0337nobodyさん
2006/08/13(日) 00:33:32ID:???0338nobodyさん
2006/08/13(日) 01:22:57ID:???addChildとかを使用するつもりだったんですが、
自分のレン鯖のPHPは5.1.2でそれらのメソッドが使えないことに気づきました。
DOM/XMLの設定もenabledになってるようです。
できればsimpleXMLで実現したいんですが、
何か良い方法はあるでしょうか、どなたかアドバイスおねがいします。
0339nobodyさん
2006/08/13(日) 01:59:28ID:???0340nobodyさん
2006/08/13(日) 02:18:32ID:???0342nobodyさん
2006/08/13(日) 02:39:38ID:???0344nobodyさん
2006/08/13(日) 11:39:02ID:6zieGLC50345nobodyさん
2006/08/13(日) 13:50:16ID:???数字に関連づいている要素( abc[1] など ) の数を別々にカウントしたり、取り出す方法ってないんでしょうか?
0346nobodyさん
2006/08/13(日) 13:51:51ID:???0347nobodyさん
2006/08/13(日) 14:13:46ID:???0348nobodyさん
2006/08/13(日) 14:33:56ID:???取り出す方法を模索してもいいと思うけど
文字列と数字(内部的には全部文字列だが)のキーが混合になる
連想配列が本当に必要か、取得しやすい配列構成に変えるとか、
そっちを考えてすっきりさせた方がいいんじゃね
0349nobodyさん
2006/08/13(日) 14:41:19ID:???便利だしなぁ
0350nobodyさん
2006/08/13(日) 14:42:05ID:???0352nobodyさん
2006/08/13(日) 14:54:15ID:???0353nobodyさん
2006/08/13(日) 15:41:37ID:???fetchでかえられることぐらいしっとるわw
0355nobodyさん
2006/08/13(日) 16:05:19ID:???それとも、PHPで吐き出すのはやらないんですかね。
0356nobodyさん
2006/08/13(日) 16:12:02ID:???所詮テキストだろうから普通に出力すればいいべ
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,'/'))
0361nobodyさん
2006/08/13(日) 16:26:17ID:???大枠のテンプレートとなるレイアウトページから
各ページで変化する個別のコンテンツ部分は
includeなりなんなりで読み込むってのは割と常套なやり方だと思うが
0363nobodyさん
2006/08/13(日) 16:26:57ID:???「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
なんとなくテンプレートエンジン作ろうとしてる気はするけど。
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(); ?>
こういう共通化ってどうやってますか?
0369nobodyさん
2006/08/13(日) 17:05:16ID:???ページのヘッダ・フッタのレイアウトの意味合いじゃなくて
テーブル単位(<table>〜</table>)でって意味合いで言ってるなら
それ全然便利じゃないぜごちゃごちゃするだけだ
そこは普通にtableタグ書きゃいい
0370nobodyさん
2006/08/13(日) 17:06:40ID:???テーブルに限らずいろいろ定義して使えるようなものね。
>>368 存在価値ありましたね。
PHPで作っている人いたので流用させてもらうことにしました。
0371nobodyさん
2006/08/13(日) 17:28:03ID:???0372nobodyさん
2006/08/13(日) 19:45:05ID:???0373nobodyさん
2006/08/13(日) 19:46:25ID:???0374nobodyさん
2006/08/13(日) 20:45:44ID:???見てると萎えてくる
0375nobodyさん
2006/08/13(日) 20:47:25ID:???0376nobodyさん
2006/08/13(日) 22:13:08ID:t3hDjrcl<?php
require_once('JSON.php');
$json = new Services_JSON();
$js1 = '[{"url":"http://www.yahoo.co.jp/","title":"Yahoo Japan!"}]';
$js2 = '{"url":"http://www.yahoo.co.jp/","title":"Yahoo Japan!"}';
$decoded = $json->decode($js1);
$hoge = $decoded->title;
print "title=".$hoge;
?>
と書いた場合に、$js2をパースした場合はうまく行きますが、$js1をパースした場合はうまくいきません。
"[]"が含まれているからだと思います。[]が含まれていてもうまくいく方法はありませんか?
0377376
2006/08/13(日) 22:16:41ID:t3hDjrcl0378nobodyさん
2006/08/13(日) 23:36:15ID:eyKLaI69処理後3秒待って他の処理したいときとかどうすればいいの
0379nobodyさん
2006/08/13(日) 23:39:16ID:???0380nobodyさん
2006/08/13(日) 23:39:45ID:fTOpOca20381nobodyさん
2006/08/13(日) 23:42:14ID:???0382nobodyさん
2006/08/14(月) 01:10:19ID:???0384nobodyさん
2006/08/14(月) 02:07:14ID:???オマエモナー
0388nobodyさん
2006/08/14(月) 02:45:01ID:???0389nobodyさん
2006/08/14(月) 03:10:13ID:???0390nobodyさん
2006/08/14(月) 06:49:54ID:???0391nobodyさん
2006/08/14(月) 07:48:30ID:???替わりのSQL文だれか教えて
0392nobodyさん
2006/08/14(月) 08:21:09ID:???つ http://pc8.2ch.net/test/read.cgi/db/1148936556
0393nobodyさん
2006/08/14(月) 11:30:35ID:???>ファイルポインタをファイルの 終端に置きます
実際は、オープンした直後のファイルポインタは先頭ですよね。
ファイルポインタがが終端に置かれるのではなく、ファイルポインタがどこを指していても書き込みは終端から行われるという事でしょうか。
0395nobodyさん
2006/08/14(月) 11:46:32ID:???不都合というか、公式のマニュアルが、実際の動作と全く真逆の事を言うという事があるのかなぁと思いまして。
翻訳時に表現がややずれてしまったとかでしょうか?
0396nobodyさん
2006/08/14(月) 11:47:42ID:???今'a'で開いた直後にftellで調べたら確かに0だったが、
http://jp.php.net/manual/ja/function.ftell.php
ftell() は、("a" フラグ付きでオープンされた) 追加のみ可能な
ストリームに対する結果も未定義です。
ってあるから'a'モードが特殊で
実際はファイルポインタは終端にあるんじゃね?
0398nobodyさん
2006/08/14(月) 11:54:53ID:RvQDryMl01:640x480
02:800x600
03:960x600
04:1024x768
05:1600x1200
見たいな感じになってるんですが
番号と解像度を二次元配列に格納するのにうまいこといかないんですけど
どのへんがマズイですかね?
以下ソースです
$kaizoudo = array();
$fp = fopen('kaizoudo.txt', 'r');
for($k = 0;!feof($fp);$k++){
$line = chop(fgets($fp));
$temp = explode(":", $line);
$kaizoudo[$k] = array($temp[0], $temp[1]);
print "$kaizoudo[$k][0]:$kaizoudo[$k][1]<BR>";
}
これを実行すると
Array[0]:Array[1]
みたいなのが出力されちゃいます
0399nobodyさん
2006/08/14(月) 12:03:51ID:???だから print "$kaizoudo[$k]";の結果表示は Array だ。
その後ろに[0]ってかいてあるよな?
だから print "$kaizoudo[$k][0]";の結果表示は Array[0] だ。
これが今の状態。
つまりprintが一次元配列か二次元配列か分かってないのが原因。
{}で囲むと大丈夫だよ。
0400nobodyさん
2006/08/14(月) 12:07:36ID:???0401nobodyさん
2006/08/14(月) 12:20:14ID:???なるほど!
格納はちゃんとできてたんだけど表示がうまくいってなかったんですね。
分かりやすい解説ありがとうございました。
0402nobodyさん
2006/08/14(月) 12:24:56ID:QXYq1pPLPHP 5.1.4
の環境で strtolower で誤変換が発生するみたいだが
これってバグかな?
<?php
$str = '検索エンジン';
echo strtolower($str); // 「検索トンヘン」と表示される
?>
0406nobodyさん
2006/08/14(月) 12:48:46ID:???Shift_JISで「検索エンジン」はアスキーコードで以下のようになる。
140 159 141 245 131 71 131 147 131 87 131 147
でだな、途中の71と87はGとWのアスキーコードなんだよ。
その部分はアルファベットとして見られて、小文字に変換され、103(g)と119(w)になる。
140 159 141 245 131 103 131 147 131 119 131 147
という値が結果として返る。これはShift_JISで「検索トンヘン」となる
0407402
2006/08/14(月) 12:49:08ID:???echo mb_strtolower($str, 'SJIS');
で出来ました。ありがとうです
>>405
精進します
0408nobodyさん
2006/08/14(月) 13:54:45ID:???0409nobodyさん
2006/08/14(月) 14:52:12ID:???文字列の末尾に「表」という漢字があるとなぜか「\」が付加されてしまいます。
例えば、フォームに「あいうえお表」と打ったとすると、実際に取得する値は「あいうえお表\」となってしまうのです。
他の漢字やひらがな、カタカナ等では発生しないようです。
該当部分のソースはこのような感じです。
$title = $_REQUEST['title'];
<input name="title" type="text" id="title" value="<?php echo $title; ?>" />
どのようにすればよいのか全く検討もつかず、こちらでお伺いした次第です。
何卒ご指南のほどをよろしくお願いいたします。
サーバー : IIS 5.1
PHP : 5.1.4
0413409
2006/08/14(月) 16:47:52ID:EO88qrv9>>410
既知の問題だったのですね。
ありがとうございます。
>>411
そうですね。REQUESTは危険かもしれません。
変更したいと思います。
>>412
PHP等のスクリプトではやはりShift-JISは適さないのですね。
大人しくUnicodeかUTFにしてみます。
無知なもので、おかしなコーディングもあったようでしたが、見事解決することができました。
質問と関係のない部分まで指摘していただき非常に助かりました。
下らない質問に返答していただき、ありがとうございました。
0414nobodyさん
2006/08/14(月) 17:06:51ID:???iriaなどを使っても上手く保存できません。
ご教授願います。
0415nobodyさん
2006/08/14(月) 17:13:13ID:???0416nobodyさん
2006/08/14(月) 17:14:06ID:???0417nobodyさん
2006/08/14(月) 17:18:15ID:???サーバサイドで動くスクリプトがDLできたら俺は恥ずかしい思いをすることになる。
やめてくれ
0419nobodyさん
2006/08/14(月) 17:25:57ID:???■ このスレッドは過去ログ倉庫に格納されています