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。メソッドを静的ではなく、オブジェクトをインスタンス化します。

How Not Kill Your Testability Using Staticsも参照してください。

于 2013-02-21T20:40:52.357 に答える
1

ほとんどすべての OO 言語では、静的メソッドは $this のスコープ外に存在します。これが、クラスのインスタンスを初期化することなく呼び出すことができる理由です。それを渡すか、静的変数として別の場所に保存して参照できるようにする必要があります。

于 2013-02-21T20:42:07.520 に答える