先日なんとなくbugs.php.netを眺めてたら、ずいぶん不可解なバグを見つけました。
function ref1(&$value) {
$value = 'bar';
}
function ref2(&$value) {
if($value==='foo'){
$value = 'bar';
}
}
function refswitch1(&$value) {
switch($value){
default:
$value = 'bar';
break;
}
}
function refswitch2(&$value) {
switch($value){
case 'foo':
$value = 'bar';
break;
}
}
$a = $b = $c = $d = 'foo';
ref1($a); ref2($b); refswitch1($c); refswitch2($d);
var_dump($a, $b, $c, $d);
結果はどうなるでしょう。
当然全てbarになりますね。
何故かPHP7.0.5の$dだけ'foo'になってます。
どういうことだってばよ。
まあ個人的には参照は一切使わないのでこのバグに遭遇することはないのですが。
なおPHP7.0.6で既に修正済です。
特に関係ないけどもうひとつ変なバグを紹介。
こちらはPHP7.0.3以降session_start()できなくなるというものですが、どうしてそこでエラーが出るのかさっぱりわかりません。
ちなみにsession_id()をコメントアウトするだけで発生しなくなります。
まるで意味がわからんぞ。
特に発展とかもなく、適当にバグを紹介するだけでこのエントリは終わり。