gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

2a問題が解決した!!!!

素晴らしき自動的な世界~或いは「型のない」世界~ https://gallu.hatenadiary.jp/entry/20061108/p1 で書いた、こんなお話、記憶にございますでしょうか?

PHP驚愕の事実

if ('2a' == 2) {
 ここ通る
}

ここから幾星霜、涙が大河となるくらいまであちこちで色々な問題を引き起こしてきました2a問題(大げさ)。
2a問題再びw https://gallu.hatenadiary.jp/entry/20070516/p1 でも書いた通り、switch でも遺憾なくその威力を発揮してまいりました。

が!!!
https://www.php.net/manual/ja/migration80.incompatible.php

下位互換性のない変更点
PHP コア
文字列と数値の比較

(厳密でないやり方で)数値と非数値文字列を比較する場合、 数値を文字列にキャストし、文字列と比較するようになりました。

との事でさりげなく書いてあるこの内容が! 全てを! 改善しました!!!!

ってなわけで、まずソースコード

<?php
declare(strict_types=1);

var_dump( PHP_VERSION );

var_dump( 2 == '2a' );

$i = '2a';
switch ($i){
    case 2:
        echo "2\n";
        break;
    case '2a':
        echo "2a\n";
        break;
}

環境その1

string(6) "7.4.11"
bool(true)
2

まぁ毎度お困りの状態*1

環境その2

string(5) "8.0.0"
bool(false)
2a

ききました奥様?
falseですって!
2aですって!!

これですよコレ!!!

というわけで。
まぁもう少し色々と掘ってみないと、な所はありますが、とはいえ一端「2a問題が(多分大体)落ち着いてきた!!」ってことで、これは快挙なんじゃないかなぁ? と思うわけでございます。

ってなわけで記念Blog。

&余談。
PHP8.0.0ですが、PHP7.4.xのconfigureオプションで(おいちゃんの場合)問題なくコンパイルできました。
インストール、とりあえずは楽なんじゃないですかしらん???

*1:なんでメンテナンスが11か、ってぇと、12と13が「This is a bug fix release.」だから、ちょいと止めてる状態