2011-07-08 7 views
-4

考えると2つのクラスをスーパークラスAのprop1__sleep()とスーパークラスのプロパティ

EDIT:
(__sleepを定義していないが)protectedにそれらを設定せずにシリアライズされた文字列でprivateプロパティが表示されます。彼らは�A�prop1のように見えますが、私はwhatが何であるかを知ることができません。

答えて

9

明示的に親クラスの関数を呼び出して、結果を追加します。

class A 
{ 
    private $prop1; 
    public function __sleep() 
    { 
     return array('prop1'); 
    } 
} 

class B extends A 
{ 
    private $prop2; 

    public function __sleep() 
    { 
     $arr = parent::__sleep(); 
     array_push($arr, 'prop2'); 
     return $arr; 
    } 
} 
+0

賢い、ありがとう。 – Francisc

+0

@Francisc子クラスの親クラスの戻り値を変更する必要があるときはいつでも、それを親クラスから取得します。 – cwallenpoole

+0

うん、私を傷つける唯一の事は、__sleep()関数を定義しなければ、 ' A prop1'の形式で値を持つ結果の文字列にプライベートプロパティを取得するということでした。 __sleep()関数を定義した場合、これらのプロパティはNULLになります。 – Francisc

2

プライベートプロパティは、子オブジェクトには表示されません。

protected $prop1; 

manualから:あなたはそれにアクセスすることができますBのでprotected$prop1の可視性を変更する必要があります

プライベートとして宣言メンバーは唯一のメンバーを定義するクラスによってアクセスすることができます。

+0

これらは継承されています。それらは派生コードには見えません。 –

+0

@Tomalak Geret'kal:ありがとう。答えが更新されました。 –

+0

:) upvoteを持っています。 –

0

プライベートメンバは、子クラスで任意のコードが表示されません。 protectedが必要です。

+1

はい、そうです。これは派生コードでは見えません。 –

+0

@Tomalak + '私はそれをより良くするために言葉遣いを編集しました。 –

+0

いいえ、私はしません。編集を見てください。 – Francisc

関連する問題