X



【PHP】下らねぇ質問はここに 9
■ このスレッドは過去ログ倉庫に格納されています
0353デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)
垢版 |
2018/08/06(月) 15:40:31.71ID:933yDlcJ0
>>352
PHP7からはもっと短く
$foo = $_POST['foo'] ?? false;
と書けたりもする

三項演算子は別に無理して使わなくていいけど
他の言語を経験してると$fooを初期化せずに

if (isset($_POST['foo'])) {
  $foo = $_POST['foo'];
} else {
  $foo = false;
}

と$fooをif〜elseの中に入れてしまうのはとても気持ち悪い
三項演算子を使わないなら自分はこう書くかな

$foo = false;
if (isset($_POST['foo'])) {
  $foo = $_POST['foo'];
}

細かい話なのであまり気にしないくてOK
0354デフォルトの名無しさん (ワッチョイ 635b-0PbX)
垢版 |
2018/08/06(月) 15:58:25.55ID:Hk1kxuZq0
ifとelseの中に書くのはあまりよくないのか(´・ω・`)
全部こうやって書いてた。。。
理由が理解できないあほですまんけど次からはfilter_inputを使うから許して
0355デフォルトの名無しさん (スププ Sd1f-j3zu)
垢版 |
2018/08/06(月) 16:05:18.97ID:UALza30Cd
if (条件A) {
$foo = 'a';
} elseif (条件B) {
$foo = 'b';
}
var_dump($foo);

条件AもBも満たさなかった時にエラーになるわな
まずはvar_dumpが参照できるレベルで$fooを定義して必ず参照できることを保証しろってこと
phpしか書けないPHPerだとelseを書けばいいだろと思うかもしれんがそうじゃないそうじゃないんだ
0357デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)
垢版 |
2018/08/06(月) 16:39:22.00ID:933yDlcJ0
>>356
<?php
の次の行に

error_reporting(-1);
ini_set('display_errors', 1);

を書こう。大雑把にいうとエラーを全部出力するって意味になる
Notice: Undefined variable: foo($fooっていう変数が定義されてない)
ってエラーが出力されるはず

あと条件式は
($test == "a") じゃなくて
($test === "a") と「=」3つ使って比較しよう
理由は「PHP 型 比較」とかで適当にググって
0359デフォルトの名無しさん (ワッチョイ 635b-0PbX)
垢版 |
2018/08/06(月) 17:25:08.30ID:Hk1kxuZq0
エラーが出たし理由もなんとなく分かったよ サンクス
でも今まで書いたやつにもエラーが出まくり 本を写しただけなのに(´・ω・`)
買う本を間違えたかな。。。初心者は何を買えばええんや。。。
0360デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)
垢版 |
2018/08/06(月) 17:36:11.38ID:933yDlcJ0
>>359
エラーの設定ってのは学習時に一番最初にやるべき事で
本来はphp.ini(PHPの設定ファイル)の方へ設定すべき事なので
それについて書かれてないのならその本はハズレだろうねw

あと本を写したって書いてるけど
ソースコードを見たまままま打ち込む(写経と呼ばれる)作業は
何かしらの言語をもう少し書けるようになってからでいいと思う
(決して無駄ってわけじゃないけど)

今の段階だとソースが付録として付いてたり
ウェブからダウンロードできるようになってる方が良いんじゃないかな

具体的にこの本が良いと答えられたらいいんだけど
知らないんだ…すまない
0361デフォルトの名無しさん (スププ Sd1f-j3zu)
垢版 |
2018/08/06(月) 17:42:18.16ID:UALza30Cd
最近はネットで動画を見ながら学習できるサービスが色々とあるからそういうのもいいんじゃね?
本は俺も知らん
phpのまともな本を探すのってウンコの山から金の塊を探すようなもんだ
0362デフォルトの名無しさん (ワッチョイ 8395-j3zu)
垢版 |
2018/08/06(月) 20:26:24.27ID:FCdiHJQQ0
未だにフレームワークを使う意味が分かんないとか言ってるのは中小零細の底辺ペチパーやろな
SQLとかを生で書いて文字列結合とかやってるんだぜきっと
LaravelあたりのモダンなFWを理解する頭もなさそう
0365デフォルトの名無しさん (ワッチョイ c376-SA/8)
垢版 |
2018/08/07(火) 07:57:29.50ID:fqjZQqpG0
サーバーサイドプログラムを書くってことじゃないかな
基本的には動作するところまでも含むと思うが、
そんな表現使う人の気持ち次第ってところもあるかと
0367デフォルトの名無しさん (ワッチョイ 6f17-j3zu)
垢版 |
2018/08/07(火) 10:42:59.89ID:5VqtIgbz0
サーバーサイドという言葉でくくってしまうとPHPはサーバーサイドで動くものなので語弊があるが
PHPは得意とするフロントを作る以外に例えばProxyサーバとして動作するものを短い行数で書いたりもできる

サーバーを書くってのはそういうものをPHPなり他の言語なりで書く時に使う表現かと
0368デフォルトの名無しさん (ワッチョイ ff7f-gWEw)
垢版 |
2018/08/07(火) 10:50:55.53ID:uocr6YSL0
>>367
例えばオンライン要素(マルチプレイ)のあるゲームを作る際に、サーバーにあるDBにアクセスしてデータを出し入れするプログラムをPHPで書いた場合は「サーバーを書く」と言っていいの?
0369デフォルトの名無しさん (ワッチョイ 8395-j3zu)
垢版 |
2018/08/07(火) 11:02:53.49ID:7NW2zIgs0
>>368
そういう用途では使わないと思う
Proxyみたいにサーバ上でスタンドアローンで動作するアプリと言えばいいかな?そういうものを書くイメージ
例えばwebminはhttpサーバ機能をperlで書いてるがそういうものをサーバーを書いたと言うのはしっくりと来る
0373デフォルトの名無しさん (ワッチョイ 6f17-j3zu)
垢版 |
2018/08/07(火) 11:51:01.42ID:5VqtIgbz0
ちょっとググるとguzzleでproxy書いてるのとかあったからやってみればいいんじゃないかな
そうすればサーバーを書くというのはどういうものなのか何となく分かるのでは
0376デフォルトの名無しさん (ワッチョイ e3cc-Xflc)
垢版 |
2018/08/08(水) 16:21:48.35ID:Ao8ga7ES0
VB/VBA(クラス無し)しか書かけないけど、PHP(5?)を触ることになった

入門書探してるんだけど、尼のカスタマーレビュー見るとどれも賛否両論でまともなのがない

「これ買え」ってのない?
内容全部が役に立つわけないのはわかってるから、本の特徴が知りたい
0377デフォルトの名無しさん (ワッチョイ ffd4-Mv1r)
垢版 |
2018/08/08(水) 16:24:03.76ID:ic4eKuJe0
リンクをクリックすると問い合わせに回答するメールの画面が開くという処理があるのですが、
EdgeとIEでは正常に動作するのですが、Chromeだと何も起こらない時があります。

$val = mb_convert_encoding($_POST['body'], "SJIS", "UTF-8");
body(本文)が短いとChromeでも正常に動作するのでbodyの内容が長い時に↑のエンコード時に何か異常が起きてると思うんですけどわかる方いますか?
0378デフォルトの名無しさん (ワッチョイ ffd0-10BI)
垢版 |
2018/08/08(水) 17:06:31.24ID:/J/gevQO0
input要素の入力の有無を確認する方法で一般的な方法を教えてください。

1. if($hoge == ''){・・・}
2. if($hoge === ''){・・・}
3. if(empty($hoge)){・・・}
4. if(!$hoge){・・・}
5. if(!strlen($hoge)){・・・}
6. 他の良い方法も教えてください。

PHPを初めて日が浅いので変な質問をすると思いますが、よろしくお願いします。
0379デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)
垢版 |
2018/08/08(水) 17:18:00.31ID:Evm53zpf0
>>378
<form action="" method="post">
<input type="text" name="hoge">

のフォームから飛んでくる$_POST['hoge']の値が空かどうかは

if ((string) filter_input(INPUT_POST, 'hoge') === '')

と書くのが実用的(正しいというと語弊があるので「実用的」と表現しとく)

少なくとも3や4は使っちゃ駄目
hogeに'0'が入っていても空として判定されてしまう
0380デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)
垢版 |
2018/08/08(水) 17:24:45.45ID:Evm53zpf0
>>377
<a href="mailto:aaa@example.com?body={$val}">〜</a>
としてリンクをクリックした時に
メーラーの本文に$valが書かれた状態にしたいって話だろうか?

もしそうならbodyに何byteまで指定できるかは環境依存なので
その方法は止めて
ローカルのMTAやSMTP使ってメールを飛ばすようにした方がいい
0381デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)
垢版 |
2018/08/08(水) 17:30:58.81ID:Evm53zpf0
>>376
ちょっと上でも話が出てるがPHPには初心者ならこれ!という本が本当にない
強いていうならPHP公式サイトにあるPHPマニュアルが一番いい

何かを作りながら学びたいのであれば
ドットインストールみたいなサービスも選択肢になるかも
0382デフォルトの名無しさん (アウアウカー Sa07-8Mjq)
垢版 |
2018/08/08(水) 17:37:04.15ID:4S5+d1joa
プログラミング言語として学ぶだけならいざ知らず, PHPの場合はほぼ確実にサーバサイドプログラミングのお作法とセットだから難しい
構文だけは簡単だけど実用しようと思うと全く初心者向けじゃないと思うわ
(サーバサイドアプリケーション自体初心者向きじゃないとは思う)
0384378 (ワッチョイ ffd0-10BI)
垢版 |
2018/08/08(水) 18:05:55.26ID:/J/gevQO0
>>378です

>>379さん
アドバイスありがとうございます。
教えてくださったコードとPHPマニュアルを見て動作から学びたいと思います。
また、3と4の方法は、日本語のみの場合、使っても問題ないということでしょうか。
覚えることが多いですが、頑張ります。
0385デフォルトの名無しさん (ワッチョイ e3cc-Xflc)
垢版 |
2018/08/08(水) 18:19:09.01ID:Ao8ga7ES0
>>381-383

やっぱなぁ
入るスキルがバラバラだからコレっつーのが難しいんだな
「PHPマニュアル」が一番ってのはわかるんだが、リファレンスであって教本じゃない感じ

XAMPP(MySQLでPHP5)環境だから、大きい本屋であさって、尼で中古買うわ
0386デフォルトの名無しさん (ワッチョイ cfb8-2Kil)
垢版 |
2018/08/08(水) 18:29:33.84ID:JZIh8c1S0
自分が始めた10年ぐらい前は赤マンモス本とかが流行ってたけどね
今はもう古いんじゃないかなあ
困ったときはとりあえずみんなオライリーって言うけど誰も言ってなかった
0387デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)
垢版 |
2018/08/08(水) 18:37:52.38ID:Evm53zpf0
>>384
> 3と4の方法は、日本語のみの場合、使っても問題ないということでしょうか

例えば if (empty($hoge)) は
1.$hogeが未定義(undefined)
2.$hoge = NULL
3.$hoge = (bool) false
4.$hoge = (int|float) 0
5.$hoge = (string) 0 or (string) ''
6.$hoge = (array) array() (空の配列)
なんかの時に真になる

意味を分かって使うのであれば別に絶対駄目だという訳じゃないよ

「日本語のみ」というのはPHPではどう判定するのか
そもそも日本語をどう定義するのかって話はあるけど
0388378 (ワッチョイ ffd0-10BI)
垢版 |
2018/08/08(水) 19:16:28.90ID:/J/gevQO0
>>387さん
詳しいレスありがとうございます。
それぞれの関数の意味を理解するよう勉強します。
ありがとうございました。
0389デフォルトの名無しさん (ワッチョイ 4ad4-AlRe)
垢版 |
2018/08/09(木) 10:37:03.17ID:eox88/ri0
>>380
ありがとうございます。mailtoじゃなくjavascriptですけどメーラー本文に問い合わせ内容が書かれた状態にしたいです。
私は専門はオフコンなのでほとんどPHP等の知識はないのですが、作った人がもういないので仕方なく探り探りやってる状態です。
0390デフォルトの名無しさん (ワッチョイ 0fe9-Qb5F)
垢版 |
2018/08/09(木) 11:17:35.06ID:MNGTuu+R0
>>389
今JavaScriptでやってるという方法も
結局は内部的にmailtoスキームを使ってるのではないかと思う

その方法はブラウザやブラウザから呼ばれるメールソフトに依存してしまう
しかも環境によってはそもそもメールソフトが起動しない

つまりPHPの処理の問題ではないって事ね

Googleフォームみたいに
問い合わせフォームを簡単に作れるサービスがたくさんあるので
そういうのを使ってみるのはどうだろう?
「問い合わせフォーム 作成」とかでググってみるとか
0391デフォルトの名無しさん (ワッチョイ 0fe9-Qb5F)
垢版 |
2018/08/09(木) 11:27:54.29ID:MNGTuu+R0
>>389
試しに実験してみたけど
Chromeはやはり?body=に長過ぎる文字列を指定してると
mailtoが反応しなくなるっぽいね

適当に10,000byteのbodyを与えみたら
Chromeはmailtoをクリックしても何も起こらなくなる
Firefoxだと2046byte以降が削除される

これはもう仕様なので他の方法にするしかないだろうね

今までも環境によっては動いてなかったんだと思うよ
0395デフォルトの名無しさん (ワッチョイ 0fe9-Qb5F)
垢版 |
2018/08/09(木) 13:23:22.82ID:MNGTuu+R0
>>394
問い合わせ内容がメールで来るわけではなく画面に表示されて
画面内のリンクをクリックしたら返信用にメーラーが立ち上がるみたいな仕組みなのかな?

問い合わせ内容が何かしらのメールアドレス宛に届くようにしさえすれば
あとは運用で解決する問題なような気がするけど…
0396394 (ワッチョイ 4ad4-AlRe)
垢版 |
2018/08/10(金) 10:53:33.88ID:Jh09aF/n0
>>395
まさにそう言うことです
VBAくらいは触ったことはあってもWebアプリはチンプンカンプンで一から勉強です・・・
0398デフォルトの名無しさん (ワッチョイ 8ad0-SkTr)
垢版 |
2018/08/11(土) 17:46:10.17ID:3QKmHOOO0
$var = $_POST['var'];
よりも
$var = filter_input(INPUT_POST,'var');
が良いんですか !?
前者は危険だと聞いた(´・ω・`)
勉強中の身だけどムズカシイ 
0403デフォルトの名無しさん (オイコラミネオ MMeb-++Qy)
垢版 |
2018/08/12(日) 00:31:14.89ID:UYzABTVRM
filter_input だと便利な場面があるというだけで、$_POST はこれまでみんな使ってきたものだし留意点を押さえれば問題があるわけじゃない。
$_POST での参照は、そもそもそのパラメタが設定されているか、期待する型かとかを自分で判定する必要があるというだけで、fi-ter_input はそれを場合によって便利にするユーティリティ関数程度のもの。
0404デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)
垢版 |
2018/08/12(日) 01:12:20.29ID:9ChOuHra0
$_POST が危険って言われるのは、変更可能なスーパーグローバルだから。
filter_input は HTTP で投げられた値を直接参照するので、$_POST とは全然別物。
ググってでてくる情報で、変数汚染に触れてる記事はないので、概要知らないとたどり着けないんだぜぃ!
0406デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)
垢版 |
2018/08/12(日) 09:08:50.60ID:9ChOuHra0
>>405
行儀の悪いモジュールやライブラリとか使うと書き換えられるかも。ってぐらい。
実際にはそれほど気にしなくて良いレベルだけど、それを気にしなきゃいけないプログラムは多い。
読みやすく/使いやすく/再利用性の高いコード書くってことは、結合を疎に保つことが重要なんで、そのあたり理解してると $_POST はまず使わん。
0408デフォルトの名無しさん (ワッチョイ de81-2km2)
垢版 |
2018/08/12(日) 15:27:03.70ID:bsEI5sh70
>>404
>$_POST が危険って言われるのは、変更可能なスーパーグローバルだから。
>filter_input は は HTTP で投げられた値を直接参照するので、$_POST とは全然別物。

$_POST が危険って言うのは聞いたことがないんだが、
Webサーバーが受けとったリクエストをPHPが取得して変数に代入している訳だろう?
PHPスクリプトが変数の値を参照するのに誰かが割り込めるのかな
リクエスト内容を直接参照すれば他が割り込めなくなるとは思えないが
filter_input がやれるなら、他も出来ると言うことだろう
0410デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)
垢版 |
2018/08/12(日) 20:02:51.29ID:9ChOuHra0
>>408
ここで言う「危険」は「セキュアじゃない」って意味ではなくて、「コードが意図した通り動かない可能性がある」とかの意味。

$_POST は「スーパーグローバル変数」なので、コード内のいたる箇所で書き換えることが可能。
で、書き換えちゃった場合、それを使用している他の箇所にも影響出るよね。ってことを危険っ言ってる。
普通は書き換え行うようなことはしないけど、何かの意図があって書き換えた場合、後に想定を超える影響を及ぼす可能性が大。
filter_input は読み取りのみが保証されるので、疎結合なコードを書くには filter_input を使用することが必須。

>> 407
GET も考え方は同じ。
0411デフォルトの名無しさん (ワッチョイ de81-2km2)
垢版 |
2018/08/12(日) 20:18:35.31ID:bsEI5sh70
>>410
そういうのはバグって行って、POSTスーパーグローバル変数の問題ではないなあ
使い方が間違えているか、ワザとそうしているかだろう

普通に推奨されている方法をあえてとらないって 意味が無いと思う
自分だけでやってシステムが終わるまでメンテするって言うなら良いけど
0413デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)
垢版 |
2018/08/12(日) 20:56:57.73ID:9ChOuHra0
>>411
バグの入る余地をなくして、読みやすく/使いやすく/再利用性の高い危険を回避したコードを書くには、結合を疎に保つことが重要
で、結合を疎に保つには filter_input を使用することが推奨されるって話なんだけど、通じてる?

普通に推奨されている方法をあえてとらないって 意味が無いと思う
自分だけでやってシステム終わるまでメンテするって言うなら良いけど
0414デフォルトの名無しさん (ワッチョイ de81-2km2)
垢版 |
2018/08/12(日) 21:02:18.40ID:bsEI5sh70
あえて書き直すほどの事は無いと思う
開発する人間が注意すれば避けられること

そこまで拘るなら、Webサーバー使わずに
自前でリクエストを受けとってしまえば良いんじゃない?

普通に推奨されているとは思わないよ。そんな関数初めて聞いたし。
どこでそんな事で大騒ぎになっているの?サイト教えて
0415デフォルトの名無しさん (ワッチョイ 06d5-++Qy)
垢版 |
2018/08/12(日) 21:24:00.23ID:l4hCxpRe0
疎結合と filter_input がいまいち結び付かん。
HTTPリクエストから必要パラメタを取り出しオブジェクト化して、後はそのオブジェクトを使ってパラメタにアクセスしましょうってんならHTTPリクエストを隠蔽できて疎かなって気もするが。
$_POST の代わりに filter_input を使うと何と何が疎になるの?って感じ。
0417デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)
垢版 |
2018/08/12(日) 21:44:39.30ID:9ChOuHra0
>>415
> HTTPリクエストから必要パラメタを取り出しオブジェクト化して、後はそのオブジェクトを使ってパラメタにアクセスしましょうってんならHTTPリクエストを隠蔽できて疎かなって気もするが。
その認識で正しいと思うよ。
ただ、それはそれ。
取り出しの時に行儀の悪いモジュールやライブラリ使用したときに、邪魔される可能性は残る。
取り出しのときにでかいスコープを回避できる 読み取り専用の関数を使用すると、予防的にコードが書けるってことです。
0419デフォルトの名無しさん (ワッチョイ de81-2km2)
垢版 |
2018/08/12(日) 22:25:25.71ID:bsEI5sh70
Webサーバーからリクエストを受けとるのに隠蔽も何もないと思うけどね
グローバル変数だから書き換えられる可能性があるというのも変
書き換えているのは自分じゃないか。人のせいには出来ないでしょう
大勢で開発しているなら、その処理を行う担当以外は操作禁止にするだけだし
0424デフォルトの名無しさん (ワッチョイ 06d5-++Qy)
垢版 |
2018/08/12(日) 22:49:31.76ID:l4hCxpRe0
>>419
んまあデバッグしたりコマンドラインでも実行できるようにしたりする可能性を考えると、HTTPリクエストの扱いは浮かせて置いた方がいいかなって気はするよ。
後は同意。
$_POST がダメで filter_input ならいいって話には繋がらないと思うし、$_POST をわざわざ書き換えるならあえてそういう設計なんだろうけど、それが甘いか明確になってないだけじゃねとしか思わん。
そういう設計はかくかく然々でお勧めしないよって話ならまだ聞ける。

ちなみに >>416 は見たよ。
話のうまいやつで面白かったよ。
PHP にも assert あったのね。しかも運用時にいないことにできるとか、なかなかいいじゃないか。
0425デフォルトの名無しさん (ワッチョイ de81-2km2)
垢版 |
2018/08/12(日) 22:55:53.50ID:bsEI5sh70
キーワードで検索出来ないってことがとても不自然に感じるんだけど
普通に推奨されていると言うなら、行う記事があってもおかしくはないよね

まさか、この関数が非公開関数で秘密にしないといけないものだったりして
0430デフォルトの名無しさん (ワッチョイ de81-2km2)
垢版 |
2018/08/12(日) 23:07:19.08ID:bsEI5sh70
そんな事実上の内部バグを問題にするよりも
リクエスト投げてくるのは、こちらが用意したフォームとは限らない、
想定外のリクエストに乗せられることが現実に発生するんだし、
そちらのチェックの方が重要だと思うよ
そういう実際的な話題を提供して議論する方が良いと思うな
0432デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)
垢版 |
2018/08/12(日) 23:09:31.00ID:9ChOuHra0
途中で投稿してしまった。

> $_POST が危険って言われるのは、変更可能なスーパーグローバルだから。
> filter_input は HTTP で投げられた値を直接参照するので、$_POST とは全然別物。
> ググってでてくる情報で、変数汚染に触れてる記事はないので、概要知らないとたどり着けないんだぜぃ!
0434デフォルトの名無しさん (ワッチョイ de81-2km2)
垢版 |
2018/08/12(日) 23:15:09.06ID:bsEI5sh70
ググっても出てこない関数がどうして普通に推奨されていると言うのか、
その根拠を聞きたかったんですが
そんなに話題に上らない関数と言うことで良いんでしょうか?
0435デフォルトの名無しさん (ワッチョイ de81-2km2)
垢版 |
2018/08/12(日) 23:17:10.07ID:bsEI5sh70
しつこくて済みませんが、グローバル変数を使うなと言うのは、一種の宗教だと思うんです
信じる人はそうすれば良いけど、信じない人はそうしなくてもいいと言う程度で
0436デフォルトの名無しさん (ワッチョイ 1b5d-2km2)
垢版 |
2018/08/12(日) 23:32:41.22ID:mMH07JtW0
PHP The Right Wayくらいは必読だと思う
ttps://www.phptherightway.com/#data_filtering

理由もなくスーパーグローバルを直接叩くようなコードを新しく書いたならそれだけでrejectするに足る
それ以外のグローバル変数も納得出来る説明がコードやコメントに無いならreject
0438デフォルトの名無しさん (オイコラミネオ MMeb-++Qy)
垢版 |
2018/08/13(月) 01:59:19.53ID:eWNl9K1lM
>>436
そこからどこまで読めばお前さんの言いたいことが書いてあるのが分からんが、とりあえず外部データをサニタイズせずに使うことの危険性なんかを説明してるのかな?
それを解決するのに filter_input や filter_var を使えますよという話だよね?
グローバル使うな的な話は書いてないようだが、ただ実はもしやと思ってたんだけど、register_globals を使うなって話と混同してるんじゃない?
それは危ないから使わない方がいいよ。
そしてそれは $_POST を使うななんてこととは全く関係無い。
0439デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)
垢版 |
2018/08/13(月) 11:03:05.76ID:rjxAd60g0
>>434
ずっと同じことのループやねぇ。。。

> ググっても出てこない関数がどうして普通に推奨されていると言うのか、
ググって出てこないのは、$_POST の危険な理由。
関数としては各所で便利だぜぃ。って紹介されている。
PHP The Right Way もその一つ。
0440デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)
垢版 |
2018/08/13(月) 11:05:41.03ID:rjxAd60g0
>>435
> しつこくて済みませんが、グローバル変数を使うなと言うのは、一種の宗教だと思うんです
宗教じゃなくて、意識の話。読みやすく/使いやすく/再利用性の高いコード書くことを意識していれば、グローバル変数の使用はまず避けるように設計する。
避ける気がないのは、読みやすく/使いやすく/再利用性の高いコード書く意識が無いってだけ。
0441デフォルトの名無しさん (ワッチョイ 6bcc-2km2)
垢版 |
2018/08/13(月) 11:35:41.06ID:V6shauct0
>>435
他言語しか知らないけど、グローバル変数なんてめったに使わない

>>440
PHP勉強中だけど、教本のサンプルって短いからグローバル使いまくり
いいコードの書き方ってなかなかないね
やっぱり実践のコード((またはきれいな)が見たいよ
0443デフォルトの名無しさん (オイコラミネオ MM56-++Qy)
垢版 |
2018/08/13(月) 12:32:33.81ID:ZXAQ0ZmcM
>>440
だからさ、自分でわざわざグローバル変数作るなってことだろ、それは。
既に用意されてるものを使うなって理由としてグローバル変数だから(誰でも書き換えられるから)ってのは意味が分からんだろ。
わざわざ示されたもの読んで言ってるんだから >>438 にも答えてくれよ。
0444デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)
垢版 |
2018/08/13(月) 12:48:25.49ID:rjxAd60g0
>>443
ずっと同じことのループやねぇ。。。

> 改変されるリスクの有無は同じなので、限定した話ではない。
改変されるリスクの有無は同じなので、限定した話ではない。
この辺が、結合を疎にする意味。

> わざわざ示されたもの読んで言ってるんだから >>438 にも答えてくれよ。
オレが示したわけじゃないんで解釈あってるか分からんけど、普通に読めば「ググっても出てこない関数がどうして普通に推奨されていると言うのか、その根拠を聞きたかったんですが」に対するコメントだと思うぞ。
filter_input 紹介している有名記事を教えてくれたんでしょ。
0446デフォルトの名無しさん (オイコラミネオ MM56-++Qy)
垢版 |
2018/08/13(月) 13:13:48.26ID:ZXAQ0ZmcM
>>444
あ、ごめん
別の人と混同してたわ

それはそれとして結合を疎にする話、自分でグローバル変数を用意してそれを介して複数クラスやモジュールでコミュニケーションするって話ならそれは結合が密だと言えると思う。
でもただシステムが用意してるリソースを参照するからと言ってそれが密かと言えばそうじゃないし、密だったとしてそれを疎にするためにラップしなさいっていうならそれは分かる。
filter_input 使ったところで何が疎になってるの?って感じだけど、そこらへんどうなの?
若干繰り返しになるけど、PHP固有の関数である filter_input 自体を直接参照せずラップしましょうってところまで行ってるのであれば、そういう方法論もあるかと思うよ。

グローバル変数誰かが書き換えたら不具合が起こるって、スコープが狭いだけでクラスメンバ変数を誰かが書き換えちゃったらという話と同じような話でしょ。
早い話、選定してるものを仕様通りに使ってないという問題なんだかrさ。
0448デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)
垢版 |
2018/08/13(月) 13:41:09.92ID:rjxAd60g0
>>446
filter_input は HTTP で投げられた値を直接参照するので、$_POST とは全然別物

スーパグローバル変数は「参照」できるだけでなく、「書き込む」こともできるのでどう使っても密になる。
オブジェクトのプロパティに「POST内容を突っ込んでおく」場合でも、スーパーグローバル変数を使用して取り出すと行儀の悪いモジュールやライブラリに邪魔される可能性が残る。
取り出しのときに読み取り専用の関数を使用すると、そういった結合を疎にすることができ、予防的にコードが書ける。
で、ここで言う読み取り用の関数が filter_input

> グローバル変数誰かが書き換えたら不具合が起こるって、スコープが狭いだけでクラスメンバ変数を誰かが書き換えちゃったらという話と同じような話でしょ。
読みやすく/使いやすく/再利用性の高いコード書く場合は、発想が逆でそういった事をさせないように設計する。

堅牢なコードを理解してないみたいなんで、これでも見て意識改善するといいよ。
https://youtu.be/17i1EL9pBwA
0449デフォルトの名無しさん (ワッチョイ de81-2km2)
垢版 |
2018/08/13(月) 14:57:40.05ID:XxWurSAu0
これ以上やっても信仰する宗教のようなのでやめますが

php.netで $_POST変数が非推奨になり、filter_input関数が推奨になったら
その時に考えることにします

今は、いくつかある対策方法の一つとして聞いておきます
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況