【PHP】下らねぇ質問はここに書き込みやがれ 64
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/02/09(土) 14:51:11ID:???PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 61
http://pc11.2ch.net/test/read.cgi/php/1201425479/
◆質問する時の注意
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を必ず明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示(メール欄に何も記述しない)、若しくはトリップをつける事。
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0557553
2008/02/19(火) 01:15:18ID:???知らなかった。ありがとう。
0558nobodyさん
2008/02/19(火) 01:28:40ID:???return count(preg_split("`.`", $string)) - 1 ;
rerurnの後のいろいろ処理を付け加えるのは美しくない!
見にくい!
count関数の中に関数いれるのは
処理が重くなる、美しくない
何でもかんでも1行プログラミングにするな!
コーディングで考える優先順位
1.負荷
2.見やすさ
俺ならこう書く
$string = preg_split("`.`", $string);
$string_count = count($string)-1;
return $string_count;
0559nobodyさん
2008/02/19(火) 01:33:35ID:???公式に書いてあるのはそれがシンプルだってことじゃない?
いちいち変数に入れる方が無駄だと思うし、処理を一括できるほうが美しいと思う。
処理の意味も関数名でわかるし。
0560nobodyさん
2008/02/19(火) 01:33:39ID:???0563nobodyさん
2008/02/19(火) 01:50:02ID:???実際の実行時は同じってことはないのかね??
といいつつも、複雑な1行だと却って構文解析?の時間がかかりそうな気がする
オレがいる。
0564nobodyさん
2008/02/19(火) 01:59:27ID:???括弧連鎖が嫌なら複数行に開くし。
スコープ次第では実行時解釈で縮まるんだろうかね。
0565nobodyさん
2008/02/19(火) 02:03:15ID:???0566558
2008/02/19(火) 02:15:19ID:???低脳土方職人にはわかるまい
わかりやすい変数にいれて、みやすくしても処理速度は0.000001秒くらししか変わらん
見にくいコードにによる全体的な作業ロスを考えろ
俺はチーム作業が多いから
見易さ重視になってるし
みにくいコードにわかりやすくコメントまで付けてるよ
0567nobodyさん
2008/02/19(火) 02:15:48ID:???そのために正規表現で分割してその数カウントしてバイト出すするなんて無駄にも程がある。
0568558
2008/02/19(火) 02:18:32ID:???最高でも2個くらいまでにしてくれ
0569nobodyさん
2008/02/19(火) 02:19:04ID:???そんなことはいちいち言うことじゃない。基本だ。
そして、>>558は可読性の面においてもあんまり必要ないんじゃないの?って話だ。
自分のルールに反論されたからって喧嘩腰で返すのは子供だ。
0570nobodyさん
2008/02/19(火) 02:22:53ID:???返り値が一目で判断できる変数名にして欲しい
0571558
2008/02/19(火) 02:26:46ID:???簡単にいえばバカでも、すぐわかるようなコードじゃないと
作業効率は落ちるんだよ
0572nobodyさん
2008/02/19(火) 02:28:42ID:???そーゆー書き方もアリだけど、一行で書くのもアリなの。
んなことでむきになってどうすんの。
0573558
2008/02/19(火) 02:32:31ID:???複数人で共同作業すれば、どこでも同じ
ベストは誰が見ても一目でわかるコード
負荷がかからないなら、できるだけわかりやすいコードにした方がいいよ
0574nobodyさん
2008/02/19(火) 02:38:33ID:???return の後を変数にするか関数で一行で書くかは場合によりけり。
一行で書けるコードをわざわざ代入連発するより、一行で書いてコメント添えるだけでも通じる。
負荷が少ないからといってリソース使いまくっていいわけでもない。
俺ルールの押し付けもほどほどに。あともうこの話題はスレ違い。
0576nobodyさん
2008/02/19(火) 02:41:14ID:???同意。全然汚くない。
これが汚いのならPEARのソースは悲惨なことになる。
百歩譲って見にくいというなら、俺ならpreg_match_countとか新しい関数を定義し
return preg_match_count($str, "`.`");
とする。
チームがどうとか上司がどうとか誰も聞いていないし聞きたくない。
そんなに見にくいならLispでも覚えるか、新しい眼鏡買ったらいいんじゃね
0577558
2008/02/19(火) 02:48:05ID:???趣味でサイト作りするなら
オナニーコード書いてる方がいいかもね
他人から見たオナニーコードほどきもいもんんはないよ
俺は相手を気遣ってコードを書いてるから
どうしても複雑なコードになってしまうときは
かなりわかりやすくコメントを書くよ
0578nobodyさん
2008/02/19(火) 02:50:39ID:???0580558
2008/02/19(火) 02:52:03ID:???0581nobodyさん
2008/02/19(火) 02:53:32ID:???0582558
2008/02/19(火) 02:54:39ID:???0583nobodyさん
2008/02/19(火) 02:55:25ID:???まあ放置だ。今回はNGしやすい。
0584558
2008/02/19(火) 02:56:58ID:???しかも俺俺関数で返しやがったら最悪
0585nobodyさん
2008/02/19(火) 03:14:28ID:???0586558
2008/02/19(火) 03:49:50ID:???$string_count = count($string)-1;
return $string_count;
1.見やすい
2.コード拡張しやすい
return count(preg_split("`.`", $string)) - 1 ;
1.見にくい
2.コード拡張しにくい
ちょっとしたコード拡張のために
わざわざ分解しないとけいない時間ロス
0587558
2008/02/19(火) 03:59:21ID:???function str_sizeof($string) {
$string = "";
$string_count = 0;
$string = preg_split("`.`", $string);
$string_count = count($string)-1;
return $string_count;
}
0588558
2008/02/19(火) 04:00:51ID:???function str_sizeof($string) {
$string_count = 0;
$string = preg_split("`.`", $string);
$string_count = count($string)-1;
return $string_count;
}
0589nobodyさん
2008/02/19(火) 04:32:57ID:???0590nobodyさん
2008/02/19(火) 07:13:14ID:???短く書いたら処理速度も速くなると勘違いする初心者が多くて困る。
0591nobodyさん
2008/02/19(火) 07:20:51ID:???$string = preg_split("`.`", $string);
$string = count($string)-1;
return $string;
$string = preg_split("`.`", $string);
return count($string) - 1 ;
0592531
2008/02/19(火) 07:35:36ID:???すまん
スレだから短くしてただけで
普段はわかりやすい名前の変数に代入しまくりだよ
あと、>>556のコードはコピペだ
0593514
2008/02/19(火) 08:00:00ID:OsGt77+r0594nobodyさん
2008/02/19(火) 08:27:59ID:???0595nobodyさん
2008/02/19(火) 09:26:39ID:???returnにはあんまり書きたくないな
0596nobodyさん
2008/02/19(火) 10:15:05ID:???0597nobodyさん
2008/02/19(火) 10:27:12ID:???ループ処理する場合は代入した方がはやいけどね。
0598nobodyさん
2008/02/19(火) 10:38:21ID:???本当に仕事でやってる人がチームだの上司だのもっともらしい言葉使ってるけど出してる技術は低レベルだし
低脳土方、オナニーコード、他の方法全否定、暴言連発で仕事でやってる人の言葉じゃないのは丸わかりでしょ。
0599nobodyさん
2008/02/19(火) 10:44:02ID:???0600nobodyさん
2008/02/19(火) 11:02:23ID:???returnにあれこれ長い処理してるコードは
あまりみないよ
ルールとして決まってるわけではないけど
returnのあとの処理は1関数(オブジェクト経由あり)、1変数が多いね
0601nobodyさん
2008/02/19(火) 11:03:45ID:???0602nobodyさん
2008/02/19(火) 11:07:29ID:???0603nobodyさん
2008/02/19(火) 11:11:56ID:???変数を使わないとコードはみにくい(関数の中に関数が深く入り込むコードになる)
↑
if文の中にif文が何個も深く入りこむコードと同じ。みにくい
0604nobodyさん
2008/02/19(火) 11:13:03ID:???当人も負荷の増加が小さいから無視していいと言ってるだろ。
逆に言えば、増えることはあっても減ることはない。
コードすべてに1行で済むのを5行10行と増やしてどうなるかは言うまでもないでしょう。
0605nobodyさん
2008/02/19(火) 11:15:16ID:???負荷と生産性どっちを優先するかは
プロジェクトによって違う
生産性の高いコードなら可読性
PHP使うくらいだから生産性の高いプロジェクトでコード書くことが多いだろう
0606nobodyさん
2008/02/19(火) 11:20:11ID:???解析時間が短縮される
毎度毎度、1行プログラミングに自己満足されるコードは勘弁
0607nobodyさん
2008/02/19(火) 11:22:09ID:???0608nobodyさん
2008/02/19(火) 11:23:35ID:???>>558
>count関数の中に関数いれるのは 処理が重くなる
って書いてあるけど、これは間違ってことでOK?
0609nobodyさん
2008/02/19(火) 11:26:33ID:???ループ処理のこといってるんじゃない?
for($i=0;$i<=count($a);$i++)
重い
$a = count($a);
for($i=0;$i<=$a;$i++)
軽い
見やすい
0610nobodyさん
2008/02/19(火) 11:27:31ID:???それに >>588 のコードが否定されてるんじゃなく「それもあり」という前提になってんのに
自分のだけを認めろと連投で大騒ぎする588自身が否定されてるだけだしな。
0612nobodyさん
2008/02/19(火) 11:31:18ID:???この時にgetenv('SERVER_NAME')を取得するとコンピュータ名が返るのは仕様ですか?
後、スクリプトのパス自身を取得したい場合は
"http://".getenv("SERVER_NAME").getenv("SCRIPT_NAME") でいい大丈夫でしょうか。
0613nobodyさん
2008/02/19(火) 11:33:20ID:???それは「count関数を何度も呼び出せば遅くなる」であって
「count関数の中に関数いれるのは 処理が重くなる 」からではないよね。
単に >>558が間違ってるだけなら、それで良いです。どうもありがと。
0615612
2008/02/19(火) 11:35:35ID:uMI3ux4Sそれは今回の挙動に関係あるんですか?
0617nobodyさん
2008/02/19(火) 11:38:36ID:???って結論前に出てなかったっけ?デジャブ?
処理を軽くする10の方法みたいなところで取り上げられてていろいろ突っ込み入って
結局有意な差は出ないってなってた気がするんだけど
0619617
2008/02/19(火) 11:40:44ID:???ループの「中身の」中に入れたら毎回コールされなきゃだ
0622nobodyさん
2008/02/19(火) 11:44:07ID:???でも実際そんなにパフォーマンスは変わらん。何万回も回すなら別だけど。
0623nobodyさん
2008/02/19(火) 11:47:56ID:???rubyの方がいいんじゃない
わかりやすい変数つかわなくても、いりくんだ関数も一目でわかるよ
0624617
2008/02/19(火) 11:52:50ID:???ttp://www.moskalyuk.com/blog/php-optimization-tips/1272
とその日本語訳がらみでツッコミ入ってた気がするんだよ。思い出せないけど。でも
パフォーマンスのためにPHPのfor文でcountを使うべきではない
ttp://paranoid.dip.jp/kaworu/2008-01-28-2.html
ってのも見つけたし俺の勘違いだったみたい
0625nobodyさん
2008/02/19(火) 11:56:33ID:???rubyみたいに
関数.関数
で呼べれば見やすい
0627nobodyさん
2008/02/19(火) 12:01:07ID:???下のURLのやつ、個数が増えると何で差が少なくなるんだろうね。不思議。
$array[$i] で $i の値が大きくなるとアクセスが遅くなるのかな。
0628nobodyさん
2008/02/19(火) 12:04:21ID:???↑
常識
0629617
2008/02/19(火) 12:08:30ID:???http://www.php.lt/benchmark/phpbench.php
こっちだと事前に計算しておけば9倍速い ってなってるけどね
0630nobodyさん
2008/02/19(火) 12:10:41ID:???0631nobodyさん
2008/02/19(火) 12:24:36ID:???$_SERVER見るのが定石。
とりあえず var_dump($_SERVER) してみれば
http://jp.php.net/manual/ja/reserved.variables.php#reserved.variables.server
0633nobodyさん
2008/02/19(火) 12:46:21ID:???0634nobodyさん
2008/02/19(火) 12:48:50ID:???0635nobodyさん
2008/02/19(火) 12:54:42ID:???0638nobodyさん
2008/02/19(火) 14:25:30ID:rf+/c0h3$uho[0] = array("A","B","C");
print $uho[0][1];//B
のように現在記載していますが
$uho = array("アルファベット","ひらがな","漢字");
$uho[0][] = "A";
$uho[0][] = "B";
$uho[0][] = "C";
print $uho[0][0];
のように記述したいのですが何も出力されません。
何か他に記述法はありますか?
0639nobodyさん
2008/02/19(火) 14:30:52ID:???>$uho = array("アルファベット","ひらがな","漢字");
の意味がよくわからんけど
$uho[0] = array();
$uho[0][] = "A";
$uho[0][] = "B";
$uho[0][] = "C";
print $uho[0][0];
ではだめなん?
0640nobodyさん
2008/02/19(火) 14:33:55ID:???ini_set('display_errors', 'on');
$uho = array("アルファベット","ひらがな","漢字");
$uho[0][] = "A";
$uho[0][] = "B";
$uho[0][] = "C";
print $uho[0][0];
0641nobodyさん
2008/02/19(火) 14:39:24ID:???低級な議論を持ち出す奴は中の人が低レベルということでFA出ている
0642nobodyさん
2008/02/19(火) 14:41:09ID:???0643514
2008/02/19(火) 14:44:42ID:OsGt77+r$stop_word=array('ボケ','死ね','馬鹿');
$num=count($stop_word);
for($i=0;$i<$num;$i++){
if(strstr($message,$stop_word[$i])==true){
print("禁止語が含まれています。");
exit;
上から4行目のstrstrってのが何の働きをするのか理解できません。
マニュアルを見たら 文字列が最初に現れる位置を見つける なんのことやらさっぱり
よろしくお願いします。
0644nobodyさん
2008/02/19(火) 15:19:37ID:???>文字列が最初に現れる位置を見つける
これは多分書いた人がstrposの説明と混同してる。
print strstr('親馬鹿子馬鹿', '馬鹿');
で帰ってくるのは「馬鹿子馬鹿」。1つめの馬鹿が見つかった位置以降の文字列を返してる。
つまり「最初に現れた位置以降の文字列を返す」のがstrstrの機能。
これで禁止ワードがあったときに strstr($message,$stop_word[$i])==true が真になる。
文字列発見するだけならstposのがいいけどまあそれはあとでいい。
0645nobodyさん
2008/02/19(火) 15:23:28ID:???文字列==ture
という比較の不思議さじゃないかと推測
0646nobodyさん
2008/02/19(火) 15:24:19ID:???日本語の説明をしろってことならしねよ
0647nobodyさん
2008/02/19(火) 15:32:26ID:???確かに真偽値は最初は混乱するわな。
FALSEになるのは何も代入されてない変数、空文字列、文字の0、数字の0あたりかな。
TRUEがその逆。何か代入されていて、中身が0ではなく、空文字列でもない。
つってもいきなり始めたらわからんよなー
>>646
おつかれさん。
0648nobodyさん
2008/02/19(火) 15:48:05ID:???この辺楽に構築できる方法ありませんか?
smartyとか持ってそうなんだけど見つからない。
0649638
2008/02/19(火) 15:53:16ID:rf+/c0h3>>639
複数行ログがあるファイルから一度のループでアルファベット、漢字、ひらがなのデータを分類するスクリプトを作成しています。
書いていただいた方法では駄目でした。
>>640
エラーは出ませんでした。念のためarray_pushを利用してみましたがやはり駄目でした。
0650638
2008/02/19(火) 16:09:29ID:rf+/c0h3お騒がせしました。
ありがとうございました。
0651nobodyさん
2008/02/19(火) 16:12:48ID:???>$uho = array("アルファベット","ひらがな","漢字");
これじゃ $uho[0] は "アルファベット" っていう文字列型なのにそれを配列として扱おうとしてんだし
$uho[0] を配列として定義しないと通らんよ。
0652638
2008/02/19(火) 16:17:14ID:rf+/c0h3勉強になりました。
$uho = array("1","2","3")のように数字だけの場合は動いてしまっていたので勘違いしていました。
0653nobodyさん
2008/02/19(火) 17:11:42ID:p5AS/DW/SQLiteからデータベースのテーブルを呼び出すところで、参考にしている書籍の
スクリプトの書き方がわからなかったので、教えていただけませんか?
下の、3行目なのですが、
$rs=sqlite_query("SELECT * FROM schedule ORDER BY s_date",$db);
では、駄目なのでしょうか?
ORDER BY のあと、何故にクエリが2つも(s_date,s_time)あるのか不思議に思いました。
<?php
$db=sqlite_open("schedule.sqlite",0666,$err);
$rs=sqlite_query("SELECT * FROM schedule ORDER BY s_date,s_time",$db);
?>
<h1 style="background:#cccccc">簡易スケジュール帳</h1>
<table border="1">
<tr>
<th>日付</th><th>時刻</th><th>予定名</th><th>備考</th><th>削除</th>
</tr>
<?php while($row=sqlite_fetch_array($rs)){ ?>
<tr>
<td><?php print($row['s_date']); ?></td>
<td><?php print($row['s_time']); ?></td>
<td><?php print($row['title']); ?></td>
<td><?php print($row['memo']); ?></td>
<td><input type="button" value="削除" onclick="location.href='schedule_delete.php?sid=<?php print($row['sid']); ?>'" /></td>
</tr>
<?php
}
sqlite_close($db);
?>
</table>
0654nobodyさん
2008/02/19(火) 17:16:40ID:???http://www.net-newbie.com/sqlite/lang.html#select
0655nobodyさん
2008/02/19(火) 17:16:48ID:???0656nobodyさん
2008/02/19(火) 17:19:47ID:???■ このスレッドは過去ログ倉庫に格納されています