2012-02-24 4 views
1

私はId抽象クラスを継承するクラスUserを持っています。どういうわけかEventという別のクラスを紹介し、Idクラスも拡張します。 __construct()のメソッドは非常に似ているので、コンストラクタコードをIdクラスに入れたいと思います。ここで親レベルでのPHP設定値

は私__construct()方法である:私はIdクラスにメソッドを置けば

class Event extends Id 
{ 
    public function __construct($id, $object){ 
     $this->id = $id; 
     foreach($object as $property => $value) { 
      if (property_exists($this, $property)) $this->$property = $value; 
     } 
    } 
} 

class User extends Id 
{ 
    public function __construct($id, $object){ 
     $this->id = $id; 
     foreach($object as $property => $value) { 
      if (property_exists($this, $property)) $this->$property = $value; 
     } 
    } 
} 

しかし、PHPは$this->$property = $value;で私に警告します。 Idクラスでは開始できないように、UserまたはEventクラスにprivateと記載されている属性がいくつかあります。

私が欲しいのは、これらの変数をprivate維持しながら、私のコードを再利用することである

答えて

0

一部のオプション(私はそれらにアクセスするために、親クラスを除いて、他のしたくないので!):

  • 使用protected変数

  • Reflectionを使用してプライベート変数を不正行為させて設定することができます。ビットをリファクタリング共通__construct

  • をインポートする

  • 使用特性(5.4)。たとえば、親が呼び出す子クラスにsetPropertyがあるか、または__setなどを実装している。

関連する問題