2012-01-20 9 views
0

私はこのような状況があります。今Person_Object's id value 10printIdInMapper()で関数をエコーする方法をここに他のクラスのあるクラスの変数にアクセスする方法は?

// Object Class 
class Person_Object { 

    protected $_id; 

    public function __construct($id = null) { 
     $this->_id = $id; 
    } 

    public function getMapper() { 
     $mapper = new Person_Mapper(); 
     return $mapper; 
    } 

    public function printIdInMapper() { 
     $this->getMapper()->printIdInMapper(); 
    } 

} 

// Mapper Class 
class Person_Mapper { 

    public function printIdInMapper() { 
     // How to access Person_Object's id here and echo id? 
    } 
} 


// Code 
$personModel = new Person_Object(10); 
$personModel->printIdInMapper(); // should print 10 

+1

作成'$ _id'のためのgetterと' $ this'を 'printI dInMapper 'そうだね。 –

+0

[クラス外の保護されたメンバ変数へのアクセス]の可能な複製(http://stackoverflow.com/questions/3475601/accessing-a-protected-member-variable-outside-a-class) – outis

答えて

2

これを試してみてください:

// Object Class 
class Person_Object { 

    protected $_id; 

    public function __construct($id = null) { 
     $this->_id = $id; 
    } 

    public function getId() { 
     return $this->_id; 
    } 

    public function getMapper() { 
     $mapper = new Person_Mapper($this); 
     return $mapper; 
    } 

    public function printIdInMapper() { 
     $this->getMapper()->printIdInMapper(); 
    } 

} 

// Mapper Class 
class Person_Mapper { 
    $_person 

    public function __construct($person) { 
     $this->_person = $person 
    } 

    public function printIdInMapper() { 
     echo $this->_person->getId(); 
    } 
} 
+0

OK。 'PersonIObject'に' getId() '関数を作成することは許されますが、' printIdInMapper() '関数のシグネチャを変更することはできません。 – Student

+0

Person_Mapperに新しい関数を追加できますか? –

+0

はい。新しい機能の作成には制限はありませんが、既存の機能を変更することはできません。 – Student

1

A若干異なるアプローチ:

class Person_Object { 

    protected $_id; 

    public function __construct($id = null) { 
     $this->_id = $id; 
    } 

    public function getId() { 
     return $this->_id; 
    } 

    public function getMapper() { 
     $mapper = new Person_Mapper(); 

     $mapper->setPerson($this); 

     return $mapper; 
    } 

    public function printIdInMapper() { 
     $this->getMapper()->printIdInMapper(); 
    } 

} 

// Mapper Class 
class Person_Mapper { 

    protected $person; 

    public function setPerson(Person_Object $person) { 
     $this->person = $person; 
    } 

    public function getPerson() { 
     return $this->person; 
    } 

    public function printIdInMapper() { 
     echo $this->getPerson()->getId(); 
    } 
} 
関連する問題