トップページ⇒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カテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え。理解できないならムリに使うな。
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0236nobodyさん2006/08/10(木) 15:02:26ID:???
>>235
あるよはげ
$_SERVER['HTTP_X_UP_SUBNO']
0237nobodyさん2006/08/10(木) 15:30:32ID:???
>>231
サブスクライバIDって書いていることはAU限定だろうから
>>236 の方法か getenv() を使えばいいよ
0238nobodyさん2006/08/10(木) 15:37:30ID:???
つうか、サブスクライバIDって単語がわかっているのなら、それで検索かけたら
山ほど例が出そうな気がするが
0239nobodyさん2006/08/10(木) 15:47:02ID:???
>>236
まあ、それは「関数」とは呼ばないね

0240hage2006/08/10(木) 15:47:18ID:GpwygKMQ
すみません。文字コード変換で、euc の"'" を utf-8の"'"に変換したいのですが、
どうしても"''"になってしまう。回避法ご存知のかたいらっしゃいます?
$apo = mb_convert_encoding("'",'UTF-8','EUC-JP');
0241nobodyさん2006/08/10(木) 16:39:02ID:???
>>240
松田さん、手元の環境では再現できませんでした。
0242nobodyさん2006/08/10(木) 16:45:07ID:???
>>240
よく知らないんだが英数記号はどの文字コードでも一緒じゃないの
0243nobodyさん2006/08/10(木) 16:45:42ID:???
>>240
松田さん、こんにちは。
こちらの環境(php4.4.2)でも確認できませんでした。
そもそも、半角の ' に文字コードが関連するとも思えませんし。
0244nobodyさん2006/08/10(木) 16:54:41ID:kXNrpO55
PHPを使ってモバイルサイトから
HTMLファイルを取得したいと思います。

ソケットオープン
↓
ヘッダー送信
↓
データ受信

という流れになるんですが、
その際に、
ユーザーエージェントを携帯端末にしたいと思います。
たぶんheaderで指定する必要があるんだと思うんですが、
誰かサンプルソース持ってないでしょうか?
0245nobodyさん2006/08/10(木) 17:11:12ID:???
ini_set('user_agent', $user_agent);
0246hage2006/08/10(木) 17:13:02ID:GpwygKMQ
>>241,242,243
どうも、すみません。私の勘違いでした。前処理で、余計なことしてて
気づかなく、ハマッました^^;

0247nobodyさん2006/08/10(木) 17:17:46ID:???
>>244
php の公式にサンプルがあるよ

http://jp2.php.net/manual/ja/function.fsockopen.php
0248nobodyさん2006/08/10(木) 17:21:56ID:???
松田・・・・かわいそうな子!
0249nobodyさん2006/08/10(木) 17:31:33ID:???
ちゃんとphp-usersでも解決報告したのはえらいぞ。松田。マルチの鑑だね。
0250nobodyさん2006/08/10(木) 22:05:54ID:???
http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/interact/forms.html#checkbox

上記のページ(W3C勧告私的日本語訳)で、「1つのフォームで複数のチェックボックスが同じコントロール名を共有してよい。こうしたチェックボックスは、例えば、ユーザが1つのプロパティについて複数の値を選ぶことを許容する。」とありますが、
例えば以下のようなformを作って送信すると、

<input type="checkbox" name="q" value="1">
<input type="checkbox" name="q" value="2">
<input type="checkbox" name="q" value="3">

確かに「q=1&q=2&q=3」というリクエストが送信されます(IE、Firefoxともに確認済み)。しかし、これをサーバサイドでPHPで受け取って print_r($_POST) とかで表示すると、

Array
(
    [q] => 3
)

のように q の値は 3 のみになっています。これはPHPの仕様がW3Cの勧告に即していないということでしょうか?
0251nobodyさん2006/08/10(木) 22:10:12ID:???
>>250
<input type="checkbox" name="q[]" value="1">
<input type="checkbox" name="q[]" value="2">
<input type="checkbox" name="q[]" value="3">
でお願いします。
0252nobodyさん2006/08/10(木) 22:17:30ID:???
その文面からだと確かにそのように読めるね。
一応こうならば何とか動くけど。

<input type="checkbox" name="q[]" value="1">
<input type="checkbox" name="q[]" value="2">
<input type="checkbox" name="q[]" value="3">
02532522006/08/10(木) 22:19:59ID:???
うは、遅かった。
0254nobodyさん2006/08/10(木) 22:20:09ID:???
それを動かそうとすると、QUERY_STRINGを取得して、自前で変換するしかないと思う
0255nobodyさん2006/08/10(木) 22:34:13ID:???
>>252-254
できました。ありがとうございました。
0256nobodyさん2006/08/10(木) 22:42:35ID:???
PHPで検索システムを作ってますが、1文字で検索するとたまに?になってしまいます。
なぜでしょうか?
0257nobodyさん2006/08/10(木) 22:57:22ID:???
>>256
文字コードの自動判別失敗と mbstring.substitute_character のせい
0258nobodyさん2006/08/11(金) 01:07:57ID:???
>>257さんへ

文字コードはちゃんと判別してると思います。(たまに?になるだけですので)
mbstring.substitute_character はnone,long,12307と変更してみましたが
やはり1文字で検索するとたまに?になってしまいます。
0259nobodyさん2006/08/11(金) 01:13:14ID:???
>>258
1文字だと誤判別しやすいんだよ。>>257の言ってるのはそういう指摘だと思う。
文字コード自動判別にはある程度の字数がないと正確に判定できないのだ。
0260nobodyさん2006/08/11(金) 01:39:59ID:???
文字コード自動判別の順番変えるべし
02611642006/08/11(金) 03:07:29ID:???
>>171

すいません、そこはここで質問する時にキーを打ち間違えたんです。
「function」ですね、お恥ずかしい。

やりたいことはようはXMLで読み込んだオブジェクト?($xml->itemみたいな)
を引数にして関数に渡して、そっちで処理したい、ってことなんですが、
まだできません。

引き続きどなたかアドバイスなどいただけたらと。
0262nobodyさん2006/08/11(金) 03:20:28ID:???
>>260
ありがとお!!!
解決しますた!!!
0263nobodyさん2006/08/11(金) 04:36:07ID:???
>>261
試したことないのであてずっぽだけど、引数をリファレンスで渡してみたらどうよ?

$xmlを丸ごと渡すなら分かるけど、$xml->itemとかいう渡し方をした場合、
$xml->itemの中で$thisとして$xmlのメンバ変数を参照しようとしたとき
$itemしかコピーされてないと正常動作しようがないんじゃないか?って気がした。
0264nobodyさん2006/08/11(金) 05:20:15ID:???
usleep()で小さい数値を指定した場合に、環境によって待ち時間がバラバラなんですが、そういうものなんでしょうか?

間で処理が遅れる事があるだろうと思うので、少し増えたりするのはうなずけるんですが、
試してみたところ、ある環境では引数に指定した値のの約3倍ずつ待っていたり
またある環境では引数に指定した値より待ち時間が少なかったりしました。

どなたかご存知でしたら教えてください。
0265nobodyさん2006/08/11(金) 07:28:05ID:???
>>264
<?php
$time1 = microtime();
usleep(3);
$time2 = microtime();
list($m1, $s1) = explode(" ", $time1);
list($m2, $s2) = explode(" ", $time2);
echo $m2 - $m1;
?>
これを繰り返したけど0.003〜0.01程度とばらばら(Win32, PHP5.1.4, Pentium D 930)
CPUのスペックや同時に動いているプロセスの数や種類などでかなり差が出るとは思われる
0266nobodyさん2006/08/11(金) 09:36:05ID:???
>>264
$time1 = microtime();
$time2 = microtime();
というふうに連続でやってもマイクロ秒付近の偏差はでるんだから、usleepのせいってわけじゃなくね?
0267nobodyさん2006/08/11(金) 11:15:29ID:???
usleepの精度とかってmanpage見た方がいいと思うんだな
0268nobodyさん2006/08/11(金) 12:11:15ID:???
>>267
The usleep() function suspends execution of the calling process for (at least) usec microseconds.
The sleep may be lengthened slightly by any system activity or by the time spent processing the call or by the granularity of system timers.
>>264
最低、引数の時間は止まるので少なくなることはない
0269nobodyさん2006/08/11(金) 12:14:53ID:???
下らない質問ですが

$a = array(1,2,3,);

この最後のカンマってあってもいいのでしょうか?
echo count($a);
とすると 4 になるかと思ったら 3 になりました。

マニュアルのどこかに載ってますでしょうか?
0270nobodyさん2006/08/11(金) 12:36:17ID:???
>>269
なくてもいい
マニュアルに載っていたかな
Cからの慣習なのかも
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:???
あんたらまだその話してたの。
■ このスレッドは過去ログ倉庫に格納されています