0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ruby脳でPHPを書くとハマる:nullと比較できてしまう件

Posted at

✅ サクッと結論

Ruby(3.4.1)では nil < '2025-04' はエラー(比較できない)
PHP(8.4.3)では null < '2025-04' はtrue(比較できる)
PHPはnullでも比較演算子の対象になるので、Ruby感覚で書くと意図しない動作をすることがある

💡 実例:Rubyならこうなる

irb(main):001> nil < '2025-04'
(irb):1:in `<main>': undefined method `<' for nil (NoMethodError)

nil < '2025-04'
    ^

→ Rubyでは、< などの比較演算子は Comparable モジュールを通じて <=> に依存しますが、nil 自体には <=>も < も定義されていないため、比較しようとすると NoMethodError になります。
nil に比較演算子がない → メソッド未定義 → 例外(NoMethodError) です。

参考: Ruby 3.4 リファレンスマニュアル ライブラリ一覧 組み込みライブラリ Comparableモジュール → nilが比較されることを想定していない

💡 実例:PHPならこうなる

php > var_dump(null < '2025-04');
bool(true)

→ 'date' がnullでも、比較は成立して通ってしまう。

🤯 なぜこうなる?

PHPでは null は比較時に自動的に 空文字列 '' に変換され、比較できるようになる。
→ "'' < '2025-04'" の評価になるため、結果は true

参考: PHP マニュアル 言語リファレンス 演算子

✅ まとめ

比較 Ruby PHP
null < "文字列" NoMethodError(比較不可) true(空文字として比較される)

✍️ 最後に

Rubyの案件を中心にやってきたのですが、初めてPHPの案件にアサインしていただいただき、
「nullが比較できるの!?」「エラーにならないの!?」と素直に驚きました。

同じようにRuby脳でPHPに挑戦している方の参考になればと思い、今回まとめてみました。

ここまで読んでいただき、ありがとうございました!

🚀 番外:RubyエンジニアがPHPでやらかしそうな罠集

  • empty() が 0 も null も "" もまとめて false にする
  • "0" == false が true になる
  • false == null も true
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?