我刚刚从PHP 5.3升级到PHP 5.5,并且面临着使用__toString()方法将Object强制转换为int时未得到的警告。无法将PHP对象转换为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中设置的变量使其工作方式不同? 我是否需要学习处理它并查看可能在某些代码中将对象用作整数的所有代码?这样做的更好的
来自php docs ** __toString()方法允许类决定当它像字符串一样对待时它将如何反应。例如,什么echo $ obj;将打印。此方法必须返回一个字符串,否则会发出致命的E_RECOVERABLE_ERROR级别错误。** – BojanT 2014-09-29 17:40:26
什么行号导致PHP通知? – Jublo 2014-09-29 17:42:55
为什么你想要做这样的事情?为什么不写一个'getId()'并将它比作'$ e-> getId()=== 50'? – 2014-09-29 17:42:59