1

嘿伙计们,我有一个奇怪的问题,$this我的代码没有被传递,我希望有人可以帮助我,结构如下:

Class 
{
    protected _foo = '';

    .........


    self::_setSessionsToProperties('_foo', array('access_token','instance_url'));

    ..........

    protected static function _setSessionsToProperties($property, $setter)
    {
        self::_validateApprovedSessions($setter);

        if (isset($this->$property) || property_exists($this, $property)) 
        {
            foreach ($setter as $set) { $this->$property->$set; }
        }

        return $this;
    }

Undefined variable: this

为了让这个工作,虽然我必须实际传递 $this一个参数字符串,这似乎非常违反直觉?

    self::_setSessionsToProperties($this, '_foo', array('access_token','instance_url'));

    ..........

    protected static function _setSessionsToProperties($this, $property, $setter)

这里发生了什么??

4

2 回答 2

2

$this只存在于对象上下文中。由于您的类方法是static您没有对象。因此没有$this。使您的方法不是静态的并实例化一个对象。

另请参阅如何不使用静力学破坏您的可测试性

于 2013-02-21T20:40:52.357 回答
1

在几乎所有 OO 语言中,静态方法都存在于 $this 范围之外,这就是为什么无需初始化类的实例即可调用它们的原因。您要么必须传递它,要么将其作为静态变量存储在其他地方以便能够引用它。

于 2013-02-21T20:42:07.520 回答