php 5.1.6 magic __toString方法

时间:2010-05-25 05:16:39

标签: php tostring magic-methods

在codeigniter中我试图使用this插件,这需要我在我的模型中实现toString方法。我的toString方法只是

public function __toString()
{
    return (string)$this->name;
}

在我的本地机器上使用php 5.3一切正常但是在使用php 5.1.6的生产服务器上它显示“Object id#48”,其中该对象的name属性的值应该出现.....我找到了problem here的一些内容,但我仍然不明白......我该如何解决这个问题?

5 个答案:

答案 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 需要根据您的。

更改PHP版本

在此之后不要忘记运行service apache2 restart

希望这会有所帮助。