basic.php:为什么不能访问这里的空属性


basic php: why cannot access empty property here?

我有一个实例变量,在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;
}