我有一个实例变量,在PHP类中设置了全局作用域。在构造函数中成功设置了变量。但是当我在getter方法中访问时,我得到了一个PHP致命错误。我是php的新手。为什么$sid
没有设置?
class Wrapper
{
private $sid = null;
/**
public function __construct($data){
// Retrieve client account automatically
$sid = (isset($data['client_id'])) ? $data['client_id'] : null;
echo("set sid to");
echo($sid);
$this->client = new Account($sid); //this is getting set properly
}
...
public function getSID()
{
return $this->$sid;
}
使用该类的代码如下所示(这是PHPunit的单元测试):
public function testGetSubsctions(){
$clientObject = ClientModel::getInstance(7)->read();
$data = array('client_id' => $clientObject->id);
$this->assertEquals($data['client_id'], 7);
$hello = new Wrapper($data);
$this->assertEquals(7, $hello->getSid());
}
上面的代码抛出以下错误:
Cannot access empty property in /path to/wrapper.php on line 243
242线上的代码是getSid,在下方
public function getSID()
{
return $this->$sid;
}
在您显示的代码的第一部分中,我们可以看到return $this->$sid;
,但$sid
没有定义。非静态属性必须在没有$
的情况下调用
正确的语法是:
public function getSID()
{
return $this->sid;
}
EDIT:有关在php中使用$this->
、static
和其他与OOP相关的内容的更多帮助,请参阅php文档,更具体地说:
关于属性
关于static关键字(仅供参考以查看差异)
以下是如何设置$sid;
public function __construct($data){
// Retrieve client account automatically
$this->sid = (isset($data['client_id'])) ? $data['client_id'] : null;
echo("set sid to");
echo($this->sid);
$this->client = new Account($this->sid); //this is getting set properly
}
变量是实例的一部分,因此必须使用$this
关键字。简单地使用$sid
表示一个新的局部变量。
并且在sid:之前也没有$
符号
public function getSID()
{
return $this->sid;
}