詳細検索

検索対象

まとめダネ!
【残酷なPHPのem…

【残酷なPHPのempty】PHPのコーディング仕様により童貞が許可されないバリデーションが発生

【残酷なPHPのempty】PHPのコーディング仕様により童貞が許可されないバリデーションが発生

更新日:

【残酷なPHPのempty】PHPのコーディング仕様により童貞が許可されないバリデーションが発生

残酷な PHP の empty https://t.co/Fx2otl2kfx

2021.10.05 20:01:58

@tanakahisateru phpだと「0」は入力されていないと
認識されるんですか?

2021.10.06 00:28:56

@RHelloworld @tanakahisateru emptyという言語構造を使っているケースで、変数が存在しない、または値が""、"0"、0、0.0、null、false、空配列の場合にtrueを返すというお話になります。
ある意味"人間の認識する空"ではあるのだけど、範囲が広すぎるやつ。

2021.10.06 01:05:15

@RHelloworld @tanakahisateru 正確にはここで「bool に変換する場合、次の値は false とみなされます。 」に対応する全て。
t.co/yrK5nXSTbX

2021.10.06 01:06:23

@effy_staffs @tanakahisateru 他の言語でも配列が空か確認する関数があるので
使っている関数の特徴は確認したり
テストのパターン増やすとか
気をつけようと思いました。
丁寧にありがとうございました!

2021.10.06 01:30:33

@RHelloworld @tanakahisateru 他の言語だと「配列が空か確認する"のみ"」の関数なんでそうそうこんなザマにはならないんですけどね・・・
ちょっと人間のお気持ちに寄り添いすぎたというか。
関数に複数の責務を与えるなって警句がとても良く生きるお話でした。

2021.10.06 01:33:50

@RHelloworld @tanakahisateru あと、"テストのパターンを増やす"ではなく"何の為に何をしている"が先に来るかもです
それに引きずられてパターンが増える事はあるけど、逆はない
今回のvalidateならば、値が来ている事、空文字で無いこと、数値であること、最低値を超えている事、最大値を下回っている事などに分解し、それぞれ検証

2021.10.06 01:36:31

そもそも 0 == false とか 0 == null って何の役に立つん? C 言語系ならまあ数を意味あると見立てる習慣でやるからわからんでもないけど、高級な言語でそもそも bool の代わりに 0 と 1 を使うほうがおかしくない? 0 は null でない有意な値と考えたほうがよくない? SQL みたいに

2021.10.05 23:10:23

あーそうなるとむしろ false == null も必要ないな。まだ 0 == false のほうが使えるぐらい。それらに等価性があると考えるんじゃなくて、条件式が bool か int か null かで if を型のパターン数ぶん作ると考えるほうがいいんじゃないか

2021.10.05 23:19:06

これようするに、あらゆる状況で万能な型をまたぐ等価性ルールないという結論っぽい。いろいろ考えた結果、ASCII の入力値の扱いと内部アルゴリズムでは期待することがそもそも違う

2021.10.05 23:26:11

これがあるからemptyはほとんど使用しない。 t.co/0iYF9cc5dR

2021.10.06 12:32:01

false君ホンマに・・・。面倒臭いから「.””」で文字列化して、preg_matchで処理しちゃおうぜ! t.co/uEuOQ3TOQH

2021.10.06 12:17:33

phpは一度使ったきりだけどnullとか空白値判定に苦労させられた記憶はあるな
php上手い人はどうしてるんだろうね t.co/nPZ895SizP

2021.10.06 12:16:25

なぜこんなバリデーション設計に… t.co/7HseoyDLBO

2021.10.06 12:15:54

1