ringoさん
VIEW
【残酷なPHPのempty】PHPのコーディング仕様により童貞が許可されないバリデーションが発生
@tanakahisateru phpだと「0」は入力されていないと
認識されるんですか?
@RHelloworld @tanakahisateru emptyという言語構造を使っているケースで、変数が存在しない、または値が""、"0"、0、0.0、null、false、空配列の場合にtrueを返すというお話になります。
ある意味"人間の認識する空"ではあるのだけど、範囲が広すぎるやつ。
@RHelloworld @tanakahisateru 正確にはここで「bool に変換する場合、次の値は false とみなされます。 」に対応する全て。
t.co/yrK5nXSTbX
@effy_staffs @tanakahisateru 他の言語でも配列が空か確認する関数があるので
使っている関数の特徴は確認したり
テストのパターン増やすとか
気をつけようと思いました。
丁寧にありがとうございました!
@RHelloworld @tanakahisateru 他の言語だと「配列が空か確認する"のみ"」の関数なんでそうそうこんなザマにはならないんですけどね・・・
ちょっと人間のお気持ちに寄り添いすぎたというか。
関数に複数の責務を与えるなって警句がとても良く生きるお話でした。
@RHelloworld @tanakahisateru あと、"テストのパターンを増やす"ではなく"何の為に何をしている"が先に来るかもです
それに引きずられてパターンが増える事はあるけど、逆はない
今回のvalidateならば、値が来ている事、空文字で無いこと、数値であること、最低値を超えている事、最大値を下回っている事などに分解し、それぞれ検証
そもそも 0 == false とか 0 == null って何の役に立つん? C 言語系ならまあ数を意味あると見立てる習慣でやるからわからんでもないけど、高級な言語でそもそも bool の代わりに 0 と 1 を使うほうがおかしくない? 0 は null でない有意な値と考えたほうがよくない? SQL みたいに
あーそうなるとむしろ false == null も必要ないな。まだ 0 == false のほうが使えるぐらい。それらに等価性があると考えるんじゃなくて、条件式が bool か int か null かで if を型のパターン数ぶん作ると考えるほうがいいんじゃないか
これようするに、あらゆる状況で万能な型をまたぐ等価性ルールないという結論っぽい。いろいろ考えた結果、ASCII の入力値の扱いと内部アルゴリズムでは期待することがそもそも違う
これがあるからemptyはほとんど使用しない。 t.co/0iYF9cc5dR
少年よ神話になれ…_:(´ཀ`」 ∠): t.co/EmRfpPBH5D
false君ホンマに・・・。面倒臭いから「.””」で文字列化して、preg_matchで処理しちゃおうぜ! t.co/uEuOQ3TOQH
不具合でがちなやつ t.co/vLZXV5PTJa
phpは一度使ったきりだけどnullとか空白値判定に苦労させられた記憶はあるな
php上手い人はどうしてるんだろうね t.co/nPZ895SizP
なぜこんなバリデーション設計に… t.co/7HseoyDLBO