不能在课堂上使用$ this来设定价值

时间:2016-07-21 13:24:18

标签: php class

我有这样的课程



Class something{
    public $token;

    public function nameA()
    {
        $this->token = 'value';
    }
    public function nameB(){
        echo $this->token;
    }
}

$ok = new something();
$ok->nameB();




为什么我在使用$ ok-> nameB();?

时什么也得不到

3 个答案:

答案 0 :(得分:4)

如果您要在类中使用自然构造函数方法,那么您的代码就可以了

Class something{
    public $token;

    public function __construct()
    {
        $this->token = 'value';
    }
    public function nameB(){
        echo $this->token;
    }
}

$ok = new something();
$ok->nameB();

答案 1 :(得分:1)

您必须先调用nameA()来分配值,此处令牌为空。

答案 2 :(得分:1)

属性$token在给定值之前为空。

在你的课堂上,唯一可能发生的方法是调用nameA方法,或直接操作属性,所以你需要先做:

Class something{
    public $token;

    public function nameA()
    {
        $this->token = 'value';
    }
    public function nameB(){
        echo $this->token;
    }
}

$ok = new something();
$ok->nameA(); //<--sets property
//or direct manipulation: $ok->token = 'blah';
$ok->nameB(); //<-- reads and outputs it

另一种方法是在构造函数中设置属性:

Class something{
    public $token;

    public function __construct()
    {
        $this->token = 'value';
    }
    public function nameB(){
        echo $this->token;
    }
}

$ok = new something(); //<-- sets propery
$ok->nameB(); //<--reads and outputs it

或者您可以使用值初始化该属性:

Class something{
    public $token = 'default';

    public function nameA()
    {
        $this->token = 'value';
    }
    public function nameB(){
        echo $this->token;
    }
}

$ok = new something();
$ok->nameB(); //outputs 'default'
$ok->nameA(); //sets to 'value'
$ok->nameB(); //outputs 'value'