Я пытаюсь получить доступ к защищенным переменным в классе второго ребенка, расширенном от его родителя, но каждый раз, когда я пытаюсь получить к ним доступ, они имеют значение NULL.
Что странно для меня, так это то, что я могу получить доступ к защищенным функциям родителя без проблем (например, $this->_submit
во втором дочернем классе.) Я проверил, что родительский класс и переменная установлены там, поэтому я 'я уверен, что это что-то глупое, что я пропускаю (все еще изучаю ООП).Может быть, что-то делать с конструктором?Но если я вызываю parent::__construct()
во втором дочернем элементе, выдается ошибка, поскольку отсутствуют сведения config
?
Родительский
<?php defined('SYSPATH') or die('No direct script access.');
abstract class Rimage {
protected $_config;
protected $_service;
protected $_client;
public static function instance($config, $service)
{
return new Rimage_Client($config, $service);
}
public function __construct($config = array(), $service = NULL)
{
$this->_config = $config;
$this->_service = $service;
$this->_client = new SoapClient('url');
}
}
?>
Первый дочерний элемент
<?php defined('SYSPATH') or die('No direct script access.');
class Rimage_Client extends Rimage {
protected $_caller;
public function __construct($config = array(), $service = NULL)
{
parent::__construct($config, $service);
$this->_caller = Arr::get($config, 'caller', array());
}
public function get($id = NULL)
{
return new Rimage_Job_Status($id);
}
protected function _submit($options, $request_class)
{
$job->request = $options;
$response = $this->_client->$request_class($job); /** Client is undefined??**/
return $response;
}
} // End Rimage_Client
?>
Второй ребенок
<?php defined('SYSPATH') or die('No direct script access.');
class Rimage_Job_Status extends Rimage_Client {
public function __construct($id)
{
return $this->_retrieve($id);
}
private function _retrieve($id = NULL)
{
$options->CallerId = $this->_caller; /** $_caller is undefined??? **/
$options->JobId = $id;
$response = $this->_submit($options, 'test');
return $response->whatever;
}
} // End Rimage_Job_Status
?>
Вызов кода с помощью Rimage::instance($config,'job')->get('12345');
Редактировать:
Ошибка, которую я получаю, заключается в том, что $_client
имеет значение NULL у ребенка, но не в родителе ... $_caller
имеет значение NULL у второго ребенка.
Приветствия и счастливого Рождества!