2012-01-20 3 views
0

У меня есть ситуации, как это:Как получить доступ к переменной одного класса из другого класса?

// 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 

Теперь, как эхо Person_Object's id value 10 в printIdInMapper() функция здесь

+1

Создать getter для '$ _id' и передать' $ 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

ОК. Создание функции 'getId()' в 'Person_Object' допустимо, но я не могу изменить подпись' printIdInMapper() 'function. – Student

+0

Можете ли вы добавить новые функции в Person_Mapper? –

+0

есть. Нет никаких ограничений на создание новых функций, но я не могу изменить существующие функции. – Student

1

несколько иной подход:

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(); 
    } 
} 
Смежные вопросы