在codeigniter中我试图使用this插件,这需要我在我的模型中实现toString方法。我的toString方法只是
public function __toString()
{
return (string)$this->name;
}
在我的本地机器上使用php 5.3一切正常但是在使用php 5.1.6的生产服务器上它显示“Object id#48”,其中该对象的name属性的值应该出现.....我找到了problem here的一些内容,但我仍然不明白......我该如何解决这个问题?
答案 0 :(得分:7)
class YourClass
{
public function __toString()
{
return $this->name;
}
}
PHP< 5.2.0 强>
$yourObject = new YourClass();
echo $yourObject; // this works
printf("%s", $yourObject); // this does not call __toString()
echo 'Hello ' . $yourObject; // this does not call __toString()
echo 'Hello ' . $yourObject->__toString(); // this works
echo (string)$yourObject; // this does not call __toString()
PHP> = 5.2.0
$yourObject = new YourClass();
echo $yourObject; // this works
printf("%s", $yourObject); // this works
echo 'Hello ' . $yourObject; // this works
echo 'Hello ' . $yourObject->__toString(); // this works
echo (string)$yourObject; // this works
答案 1 :(得分:3)
引用手册:
值得注意的是在PHP之前 5.2.0 __toString方法仅在直接组合时调用 with echo()或print()。自PHP 5.2.0,它在任何字符串上下文中调用(例如在带有%s的printf()中 修饰符)但不是其他类型 上下文(例如,使用%d修饰符)。 从PHP 5.2.0开始,转换对象 没有__toString方法来字符串 会导致E_RECOVERABLE_ERROR。
如果您在PHP中使用它,我认为您已手动调用__toString方法< 5.2而不是回声或打印的背景。
答案 2 :(得分:2)
升级PHP
我正在处理同样的问题,我怀疑你最好的选择是将生产服务器上的php升级到>= 5.2.0
将来(我目前正在努力学习),尝试使用您将部署到的相同版本进行开发。
答案 3 :(得分:0)
你必须为版本<显式调用php magic函数__toString() 5.2。所以你的代码会变成这样:
public function myname()
{
$name = $this->name;
return $name.__toString(); //for php versions < 5.2,will also work > 5.2
}
对于版本&gt; 5.2自动调用__toString
答案 4 :(得分:0)
您需要安装sudo apt install php7.0-mbstring
需要根据您的。
在此之后不要忘记运行service apache2 restart
希望这会有所帮助。