基本的php:为什么不能在这里访问空房产?

时间:2013-11-18 17:56:01

标签: php

我有一个在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;
}

2 个答案:

答案 0 :(得分:1)

在您显示的代码的第一部分中,我们可以看到return $this->$sid;但未定义$sid。必须在没有$

的情况下调用非静态属性

正确的语法是:

public function getSID()
{
  return $this->sid;
}

编辑:有关$this->static的使用以及与php中的OOP相关的其他内容的更多帮助,请参阅php documentation,更具体地说:

About properties

about static keyword(仅供您查看差异的信息)

答案 1 :(得分:0)

以下是设置$ 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;
}