PHP 5.3 から PHP 5.5 にアップグレードしたところ、__toString() メソッドを使用してオブジェクトを int にキャストするときに、以前は得られなかった警告に直面しています。
サンプルコードは
<?php
class MyObject {
protected $_id;
public function setId($id) { $this->_id = $id; }
public function __toString() { return (string)$this->_id; }
}
$e = new MyObject();
$e->setId("50");
if($e == "50") echo "50 == 50 as String\n";
else echo "50 !== 50 as String\n";
$e->setId(50);
if($e == 50) echo "50 == 50 as Integer\n";
else echo "50 !== 50 as Integer\n";
$e->setId("50");
if($e == 50) echo "50 == 50 as String = Integer\n";
else echo "50 !== 50 as String = Integer\n";
$e->setId(50);
if($e == "50") echo "50 == 50 as Integer = String\n";
else echo "50 !== 50 as Integer = String\n";
私のサーバーの出力は
50 == 50 as String
50 !== 50 as Integer
50 !== 50 as String = Integer
50 == 50 as Integer = String
私はそれらすべてが真実であることを期待していましたが。実行中に受け取る通知は次のとおりです。
Object of class MyObject could not be converted to int
それらは、コードを含む行によってトリガーされます
($e == 50)
これは意図したものですか?PHP ini で別の動作をさせるために設定できる変数はありますか? それに対処することを学び、一部のコードでオブジェクトを整数として使用する可能性のあるすべてのコードを確認する必要がありますか?