【PHP】下らねぇ質問はここに書き込みやがれ 55
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/09/29(土) 18:35:56ID:YlkpEUW6PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 54
http://pc11.2ch.net/test/read.cgi/php/1189309377/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0437nobodyさん
2007/10/06(土) 00:48:25ID:???> PHP5はオブジェクト型を暗黙で参照渡しするんじゃないか?
それはそうだが
> 配列はオブジェクト型でしょ。
そんな与太話をどっから拾ってきたんだ。
0438nobodyさん
2007/10/06(土) 00:58:59ID:???0439nobodyさん
2007/10/06(土) 01:06:24ID:???保存されてないんだけどなんでだろう
ダウソした見本コードでも保存されてないし
0443nobodyさん
2007/10/06(土) 01:15:18ID:???cookie.php
<head>
<title>クッキーでデータを記録する</title>
</head>
<body>
<form method="POST" action="cookie_rec.php">
E-Mailアドレス:
<input type="text" name="email" size="30" maxlength="50"
value="<?php print($_COOKIE['email']); ?>" />
<input type="submit" value="送信" />
</form>
</body>
</html>
cookie_rec.php
<html>
<head>
<title>クッキーでデータを記録する</title>
</head>
<body>
<?php setcookie("email",$_POST['email'],time()+(60*60*24*90)); ?>
クッキー"email"を保存しました。
</body>
</html>
こんなんです・・・・
0444nobodyさん
2007/10/06(土) 01:17:10ID:???本だから簡易化して説明するのは当然としてもひどすぎる
0445nobodyさん
2007/10/06(土) 01:20:59ID:???自信ないけどクッキーってhtml本体より前に発行しないといけなくなかったか?
setcookie
http://jp2.php.net/manual/ja/function.setcookie.php
etcookie() は、その他のヘッダ情報と共に 送信するクッキーを定義します。
ほかのヘッダ情報と同様に、 クッキーは、スクリプトによる他のあらゆる出力よりも前に 送信される必要があります(これはHTTPプロトコルの制約です)。
<html> や <head> タグはもちろん 空白も含め、あらゆる出力よりも前にこの関数をコールするようにしなければなりません。
0446nobodyさん
2007/10/06(土) 01:21:29ID:???>>438
$arr1 = array('a'=>2);
$arr1[] = $arr1;
var_dump($arr1);
参照になってないか?
0447nobodyさん
2007/10/06(土) 01:22:06ID:???例 array_key_rename($hash, $key, $rename);
配列の中から特定のキーを除いた配列を返す関数ありますか?
例 array_key_remove($hash, array('key1','key2','key3'));
質問に答える方は、>>1の内容をよく読んでから答えてください。
答えになっていないリンクはいりません。
0448nobodyさん
2007/10/06(土) 01:22:53ID:???0451nobodyさん
2007/10/06(土) 01:29:41ID:???その一言がいえないんですよね?w
0452nobodyさん
2007/10/06(土) 01:30:29ID:???スレ違い
http://pc11.2ch.net/test/read.cgi/php/1158647441/
0454nobodyさん
2007/10/06(土) 01:32:48ID:???すこし落ち着いたらどうですか?w
PHPが大好きなのはわかりますが、
ないものは素直にないといいましょうよ。
それだけでしょ?
0460nobodyさん
2007/10/06(土) 01:44:53ID:???厳密には
php5ではオブジェクトをハンドルで渡すんだよ
参照がデフォルトってわけじゃない
あとphpはリファレンスカウンタっていうのがあるから
スクリプト上でコピーしても、内部的には実際にデータが変更
されたタイミングでコピーしてる
0461nobodyさん
2007/10/06(土) 01:52:56ID:???<?php
$a = array(1,2,3);
$b = $a;
$b[0] = 9;
var_dump($a);
var_dump($b);
?>
結果
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
array(3) {
[0]=>
int(9)
[1]=>
int(2)
[2]=>
int(3)
}
どこが参照だって?
0462nobodyさん
2007/10/06(土) 01:54:59ID:???そのケースは知ってるからあえて>>458にしたんだけど?
>>460 おお、変更したら本当にコピーされた。勘違いしてた。
0465nobodyさん
2007/10/06(土) 02:01:09ID:???0469nobodyさん
2007/10/06(土) 02:38:09ID:???0470nobodyさん
2007/10/06(土) 02:42:39ID:???態度がでかい質問が>>1嫁&誘導
ていうか>>1読めってわざわざご親切に誘導するのもあれだな
これからは徹底放置でいこうぜ
スレタイだけ読んで質問スレだから適当に質問すればいいじゃなくて
テンプレ読んで質問するのがここでのルール
ID出すのがなんで嫌がるのか理解できない
質問した後自作自演で回答者側に突っ込みいれたければsageればID出ないだろ?
それに同じIDで複数回質問したっていいじゃないか
0471nobodyさん
2007/10/06(土) 02:44:56ID:???代入の仕組みは以下参照
http://derickrethans.nl/files/phparch-php-variables-article.pdf
>>461の例だと
$b = $a; ← この時点では$bは$aを指している
$b[0] = 9; ← ここで初めて$bはデータの実体を持つ
PHPのスクリプト上で検証しようとしても無理
0473nobodyさん
2007/10/06(土) 03:29:10ID:???new StdClass() はオブジェクト
リファレンスカウントは
debug_zval_dumpでみれるよ
0474nobodyさん
2007/10/06(土) 03:52:44ID:qCDvmkUY見つけられなかったので、こちらで質問させてください。
自分が使っているのはPHP4です。
$aに適当な整数が代入されているとき、その値が0、3、17のときだけ
共通の処理をしたいのですが、自分はif文で、
if (($a===0) or ($a==3) or ($a==17)) 処理;
みたいに書いてます。
これって自分でも冗長だと思ってるのですが、
他にもっとシンプルに書ける方法ってありますか?
ただ、処理したい値が2,3通りしかないような場面でのことなので、
できれば配列やループは使いたくないんです。
我侭言って申し訳ないのですが、どなたかよろしくお願いします。
0475nobodyさん
2007/10/06(土) 03:59:20ID:???if (in_array($a,array(0,3,17))) {
echo 'ほげほげ';
}
で良いじゃないかと思ったら配列はダメって言うし
あえて言うなら囲まずに
if ($a === 0 || $a === 3 || $a === 17) {
echo 'とか?';
}
0476nobodyさん
2007/10/06(土) 04:06:12ID:1HWd7HDNpreg_replace
0477nobodyさん
2007/10/06(土) 04:13:04ID:???switch ($a):
case 0:
case 3:
case 17:
ヒットした時の処理;
break;
default:
endswitch;
0479403
2007/10/06(土) 04:28:27ID:???>iif( ! is_array($hoge)){でhogeが配列でないことを調べているのに、
>$hoge = $tmpで配列に変換しているということは、
>左辺が変数で右辺が配列のとき値の代入すると、
>自動で左辺の変数が右辺の方の配列に変換されるのでしょうか?
?なんですけど。
0482nobodyさん
2007/10/06(土) 04:37:51ID:???それのやってる事は
if( ! is_array($hoge)){ // 配列ジャナイ場合(これobjectとかがきたらどーすんだis_stringとかにしたらいいのに)
$ tmp = array(); // 配列初期化
for($ i = 0; $i<strlen($hoge); $i++){ // $hogeを文字列と仮定して文字の長さ文ループ
$tmp[$i] = substr($hoge, $i, 1); // 1バイトずつ文字を切り出して配列に格納
}
$hoge = $tmp; // $hogeに格納
}
多分この後に何か$hogeを使った処理を使うためにしてるだけじゃないかな
0483nobodyさん
2007/10/06(土) 04:40:11ID:???そんなことは最初から403も分かってるよ。
スカラーの変数に配列の変数を代入なんて何故できるの?って話。
CかJavaみたいなガチガチ言語に頭が毒されてるんでしょ。
0484403
2007/10/06(土) 04:50:04ID:???>CかJavaみたいなガチガチ言語に頭が毒されてるんでしょ。
ズバリそうなんです。
「もう、こんなもんだ」と無理矢理納得するしか無いのかな。
こんな事許されてたら、メンテナンス悪くなるし、可読性低くなるし、
危険じゃないのかしら?
とりあえず、有り難うございました。
0485474
2007/10/06(土) 04:51:11ID:qCDvmkUYまさかこんなに早くお答えいただけると思ってませんでした。
お礼が遅くなって申し訳ありません。
自分の書き方でも特に冗長ではないというご意見をいただき安心しました。
でも、475さんや477さんのアドバイスはとても勉強になりました。
状況に合わせて使ってみたいと思います。
みなさん、本当にありがとうございました。
0486nobodyさん
2007/10/06(土) 04:53:04ID:???なんだそんな事か(´・ω・`)
俺は自分の中で型を意識した組み方してるけど
そこらへんは組み方次第でどーとでもなるんじゃないかなぁ・・・
意識するとメンドイ事多いけど・・・
0487474
2007/10/06(土) 04:56:47ID:qCDvmkUY476さんのご指摘の preg_replace を使う方法は
後で自分でも調べて確認してみます。
アドバイスありがとうございました。
0488nobodyさん
2007/10/06(土) 05:11:58ID:1HWd7HDN御免間違えた
preg_match
0489nobodyさん
2007/10/06(土) 05:27:00ID:???ここまで適当なのは他にあまり無いよ。
0490nobodyさん
2007/10/06(土) 07:01:28ID:???Perlはわざわざmyをつけないと歴史駆るスコープにならないような言語だし
0491nobodyさん
2007/10/06(土) 09:46:45ID:hKjy3c4n0492nobodyさん
2007/10/06(土) 09:53:27ID:???0493nobodyさん
2007/10/06(土) 10:03:02ID:???内部変換しているかどうかの違いだけ
0494nobodyさん
2007/10/06(土) 10:06:12ID:???のは可読性があがって俺は好きだ
0495nobodyさん
2007/10/06(土) 11:01:19ID:???0496nobodyさん
2007/10/06(土) 11:02:25ID:???$thisもだけど->がめんどくさい。「.」は文字列結合で使用済みだから仕方ないけど。
最近Ruby始めたら変数の$すら面倒になってきた。始めた頃は変数わかりやすいと思ってたのに。
チラシの裏スマソ
0497nobodyさん
2007/10/06(土) 11:20:23ID:???0498nobodyさん
2007/10/06(土) 11:27:26ID:???0499nobodyさん
2007/10/06(土) 11:37:53ID:???給料は安いくせにやたら条件が高いから困る
未経験歓迎なのは使い捨てのJavaだな
0500nobodyさん
2007/10/06(土) 11:46:26ID:???いやいや、そういう感覚は大事だと思うよ。
ただ、型に縛られる必要は無いと思う。
function hoge($val)
本来$valはarrayである。と決めきってしまうと
要素数が1のときもわざわざarrayにしてから関数よばなきゃいけない。
ところが、内部でarrayじゃないときは、arrayにしてやる
処理を入れておけば、関数の外部仕様的には
複数指定したいならarrayにしてちょ。
単数ならわざわざarrayにしなくてもいいよ。
という緩さが実現できる。
0501500
2007/10/06(土) 11:48:38ID:???$year = 2001;
とかしてるのに変数を流用して
$year = 年とは無関係の何か;
とかされるとストレスかかるな。
0503nobodyさん
2007/10/06(土) 12:20:35ID:???500じゃないが
俺は外部で型変換するなー
内部で変換させたら関数内がどんどん見難くなるし。
変換する事が多いなら変換用の関数作ってその関数から呼ぶようにしてたりはするけど。
0504500
2007/10/06(土) 12:23:12ID:???内部であえてチェックするかってこと?
エラーになる要因は早めにつぶすべきだから、
チェックするのは良い習慣だと思う
ただ、すべてでチェックはオーバーヘッドになるし、書くのめんどくさいから
適度に手抜きしてるかな
パラメータに限らないが前提条件を満たしているか
チェックすることはよくある
0506nobodyさん
2007/10/06(土) 12:41:37ID:???0508nobodyさん
2007/10/06(土) 12:44:39ID:???0509nobodyさん
2007/10/06(土) 12:45:40ID:???0510nobodyさん
2007/10/06(土) 12:46:49ID:???0512nobodyさん
2007/10/06(土) 12:51:21ID:???0513nobodyさん
2007/10/06(土) 13:23:50ID:JwDld5m1以下頭からの処理の流れ。
・POSTのみで渡される値はPOSTのみ、GETならGETのみで取得
・GETで来ないはずの値が来たらはじく。
・変数の型と値のとりうる範囲や文字列の長さ、形式に添っているか
型判定関数や正規表現でチェックし、不正なものをはじく。
ただしフォーム入力値などキーボードで入力するものを除く。
:
・値を使用する関数内で、型や値の範囲、文字列長さなどを上と同じように
チェック。フォーム入力値などは誤入力の可能性があるので
エラー表示して再入力を促して終了。
・HTML表示する場合はすべての変数をエスケープして表示。
・DBにアクセスする場合はPrepared Statementで値を渡す。
(今のところエミュレーションじゃないので普通に渡してる)
・ストアドで値の妥当性をチェックし、例えば存在しないはずのユーザーID
とかだったら不正入力の結果を返して終了。誤入力の可能性のある
値であれば別の結果を返して終了。問題なければ処理を実行。
(DB処理はすべてストアド使ってます。生SQL文はソースに書いてません)
・ストアドからの返り値から、はじくなりエラー表示するなり処理結果を
表示するなり行う。
はじくってのは強制的にセッション切ってます。
正当性判定の関数を作っておくくらいで、上のような地道なやり方しか
思いつかないんだけど、こういう便利なものがあるよとかこうしたほうがいいよ
とかこんなのも知らないの?とかあったら教えてくださいませ。
フレームワーク使ってないけど、こういうのが楽になるのかなあ。
0514nobodyさん
2007/10/06(土) 13:41:51ID:???そkらへんの処理めんどくさいからフレームワーク使ってる
簡単なもんだったら期待値以外はエラー
クエリー実行は全てぷりぺあ通して使ってる
0515nobodyさん
2007/10/06(土) 13:49:34ID:???かならずしも回答がくるとは限らない
回答者のレベル・回答者の気分で影響するからだ。
質問者はどうやったら回答率をあげられるか考えてから言葉を選んだほうが良い
0516nobodyさん
2007/10/06(土) 14:18:15ID:???それを形にしようとする努力をするタイプかどうかが重要なんじゃないかな?
すごいといわれるプログラマや技術屋は掃いて捨てるほどいるけど、頭の柔軟なやつは少ないからね
起業するなら特にコミュニケーション能力なんかにも長けている必要がある
物事をシステマチックに考えて合理的な道を歩むのは得意だけど、逆を返せば不必要な回り道をしたくないばかりに
それに重点を置かないから結果的に評価がされなかったりと、そのあたり不器用な人多いね
0517nobodyさん
2007/10/06(土) 14:38:54ID:QcrZFc+A四苦八苦しながらやっている者です。
PHPをやっていて、どうしても解決できなかったので教えて下さい。
BASIC言語でいう、GOTO文ってPHPだとどうやって書けば宜しいのでしょうか?
あと、PHPだと、文法エラーの際に行番号がでるのはいいのですが、
PHPコードの先頭に行番号を書こうとすると、それが原因で文法エラーがでてしまします。
これは環境が悪いせいなのでしょうか?今は行番号を書かずに、先頭から数えています。
すみません、二点質問お手数ですが宜しくお願いします。
0521nobodyさん
2007/10/06(土) 14:45:23ID:???って書けばok
0522nobodyさん
2007/10/06(土) 14:55:18ID:QcrZFc+A>>520さん
>>521さん
早速のお返事ありがとうございます。
行番号は、コメント文として書けば宜しいんですね。ありがとうございます。
行番号をコードに書いていないのに、コンパイラが勝手に行番号を認識しているので、面食らってしまいました。
隠れている行番号を見せてくれるエディタ(ソフト)って、何があるのでしょうか?
私が今使っているのは、Windowsで標準ソフトであるメモ帳です。
あと、GOTO文についての回答どうもありがとうございました。
PHPって、GOTO文ないんですか。それはかなり辛いですね。
ネットで検索していても無かったんで、もしかしてと思っていたのですが。
今相当青い顔になっていますが、頑張ってやってみます・・・
どうもありがとうございました。
0523nobodyさん
2007/10/06(土) 15:01:49ID:???何度も同じ処理をしたいなら関数作れば良いし
ループを抜けたいとかならbreakと書けば良い
はっきり言ってgotoなんか無くても書けるよ
エディタは
emeditorとか秀丸とか一般的なエディタなら普通にできるし
PHPエディタ_スタンドアロン版とか使えば良いんじゃないかな
0524nobodyさん
2007/10/06(土) 15:05:46ID:???なんて質問投げられたら発狂するかも。(ちょっとオーバーだけど)
0525nobodyさん
2007/10/06(土) 15:25:18ID:???ネタなのかって疑ってしまいそうになるけど、BASICの考え方は
捨てたほうがいい。goto文なんていまどきの言語じゃ仮に実装
されててもまず使わない。
BASICでもgoto使うとスパゲティプログラムになっちゃいやすい
とかで、構造化プログラミングとか推奨されてたはず。
labelとかでcontinueからの飛び先を指定するのとかはあったり
するけれど。
行番号もやっぱりない。
それじゃ分かりにくいので、たいていは行番号を表示してくれる
エディタを使ってコード書く。コードそのものに行番号書く必要はない。
っていうか君はまず本なり買って基本的なこと学ぶべきだと思うよ。
プログラミングの感覚そのものは役に立つと思うけど、「BASICのように・・・」
とか考えちゃうと却って足踏みするだけだと思う。
0526nobodyさん
2007/10/06(土) 15:32:14ID:???0527nobodyさん
2007/10/06(土) 15:52:29ID:???まぁたまにGOTOほしいと思うことはあるよ
0528nobodyさん
2007/10/06(土) 16:02:51ID:???0529nobodyさん
2007/10/06(土) 16:08:00ID:???0530nobodyさん
2007/10/06(土) 16:08:11ID:kTZnfqET0532nobodyさん
2007/10/06(土) 16:28:59ID:???20 モニタの白が茶色に見えてくる
30 CLEAR SCREEN '掃除する
40 GOTO 10
0533nobodyさん
2007/10/06(土) 16:30:56ID:???そんなことも出来ない言語はお�hる
0534nobodyさん
2007/10/06(土) 16:34:22ID:???自動的に、ってのがプログラムを書かなくても勝手に、って意味なら無い。
素直に
テンポラリディレクトリにアップロード(自動)→ディレクトリ生成→そこにファイル移動
ってコードを書けばいいと思うよ。
0535nobodyさん
2007/10/06(土) 16:36:27ID:???出社
while(true){
仕事しながらタバコふかす
モニタの白が茶色に見えてくる
CLEAR SCREEN '掃除する
if(終業時間<=時計) break
}
退社
0536nobodyさん
2007/10/06(土) 16:37:16ID:???いまどきはBasicでもgotoはまず使わないし、先頭に行番号も書かないよ。
機能ごとにfunctionで処理を書いて、それを呼び出し→終わったら自動で戻る、を使う。
ファイルの行番号についてはプログラム向けのテキストエディタなら大抵表示してくれる。
0537nobodyさん
2007/10/06(土) 16:41:41ID:???どうでもいい事だが、
> if(終業時間<=時計) break
の所は、オレなら
if(終業時間==時計) break
と書く。じゃないとバグの発見が遅くなる。
■ このスレッドは過去ログ倉庫に格納されています