我一直在阅读有关OO PHP编程和封装的内容,我仍然觉得它有点令人困惑。
我有这段代码:
class Item {
private $id;
private $description;
public function __construct($id) {
$this->id = $id;
}
public function getDescription() {
return $this->$description;
}
public function setDescription($description) {
$this->description = $description;
}
}
在我的testclass.php文件中,当我使用set和get这样的函数时:
$item = new Item(1234);
$item->setDescription("Test description");
echo $item->getDescription();
我收到错误说明未定义的变量:description。有人可以向我解释为什么会这样,因为我认为set方法的重点是来定义变量?我以为你在类中声明变量,然后在使用set方法时定义变量,以便可以使用get方法访问它?
答案 0 :(得分:4)
return $this->$description;
错了。您引用变量$description
,而不是返回$this->description
。阅读变量变量。
答案 1 :(得分:2)
只想添加@prisoner的正确答案。
$this->description
与
不同$this->$description
因为这就是你所谓的"变量"。
例如:
$this->description = "THIS IS A DESCRIPTION!"
$any_variable_name = "description";
echo $this->$any_variable_name; // will echo "THIS IS A DESCRIPTION"
echo $this->description // will echo "THIS IS A DESCRIPTION"
echo $this->$description // will result in an "undefined error" since $description is undefined.
有关详细信息,请参阅http://php.net/manual/en/language.variables.variable.php。
一个有用的例子是,如果您想访问给定结构中的变量/函数。
示例:
$url = parseUrl() // returns 'user'
$this->user = 'jim';
$arr = array('jim' => 'the good man', 'bart' => 'the bad man');
echo $arr[$this->$url] // returns 'the good man'