我创建了一个带有构造函数和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中的魔术方法。
答案 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;