0

子クラスの静的メソッドで親(非静的)プロパティにアクセスする際に問題が発生しました。私はこれらを以下のように試しました:

class Parent
{
    protected $nonStatic;
    // Other methods and properties
}

class Child extends Parent
{
    public static function staticFunc()
    {
        $test = $this->nonStatic;     # Using $this when not in object context
        $test = self::$nonStatic;     # Access to undeclared static property
        $test = parent::$nonStatic    # Access to undeclared static property
    }
}

stackoverflowで同様の質問を確認しましたが、実用的な解決策が得られませんでした


PSタイプミスについて申し訳ありませんが、上記のコードはダミーの例です

4

3 に答える 3

4

静的メソッドから親の非静的プロパティにアクセスすることはできません。これは、定義上不可能であり、意味がないためです。

非静的プロパティは、オブジェクトインスタンスがあり、オブジェクトインスタンスがない場合にのみ使用できます。

于 2012-12-16T08:47:59.700 に答える
1

親のプロパティも静的にします。それ以外の場合、静的コンテキストではアクセスできません。

于 2012-12-16T08:47:47.190 に答える
1

明らかに、静的メソッドは、非静的な親プロパティが何であるかを知りません。呼び出しが行われているオブジェクトのインスタンスがわからないため、そのオブジェクトが親であることがわかりません。親プロップを静的に設定するか、子オブジェクトのインスタンスをメソッドに渡して、passedChildObject.parentProp を呼び出します。

public static function staticFunc(Child c)
{
//should give you passed instance parent prop
return  c.$nonStatic
}

今、あなたがプロパティが欲しいとき..

{
//assume x is already initialized, this is just for clarity 
Child x;
returnedProp = x.staticFunc(x)
}
于 2012-12-16T08:53:50.183 に答える