为什么我不能用PHP中的__toString()打印任何东西?

时间:2012-03-28 20:42:28

标签: php tostring magic-methods

我创建了一个带有构造函数和toString方法的类,但是它没有用。

class Course
{
    protected $course
    public function __construct()
    {
        $this->$course = "hello";
    }

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

我收到错误:

Fatal error: Cannot access empty property 

如果我这样做:

$string = (string) $course;

没有打印出来。

虽然我熟悉Java的toString方法,但我不熟悉PHP中的魔术方法。

2 个答案:

答案 0 :(得分:9)

你的构造函数中有一点错字,应该是:

protected $course;
public function __construct()
{
    $this->course = "hello"; // I added $this->
}

如果您现在调用__toString()函数,它将打印“hello”。

<强>更新
您应该像这样更改__toString()函数:

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

您的总代码将变为:(去复制粘贴:))

class Course
{
    protected $course;
    public function __construct()
    {
        $this->course = "hello";
    }

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

答案 1 :(得分:7)

你已经理解了魔术方法,但你在这里有一个错误:$ course未定义。

您的错误就在这一行:

    $string = (string) $this-> $course;

应该是

    $string = (string) $this->course;

您可能知道在PHP中可以执行以下操作:

$course='arandomproperty';
$string = $this->$course; //that equals to $this->arandomproperty

这里,$ course没有定义,所以它默认为''(并抛出一个NOTICE错误,你应该在开发过程中显示或记录)


编辑:
你的构造函数中也有一个错误,你应该$this->course='hello';


编辑2

这是一个有效的代码。你有什么不明白的地方吗?

<?php
class Course
{
    protected $course;
    public function __construct()
    {
        $this->course = "hello";
    }

    public function __toString()
    {
        $string = (string) $this->course;
        return $string;
    }
}
$course = new Course();
echo $course;