2016-04-25 2 views
1

Я строю сервис API и есть родительский класс:Ссылка PHP класс для родительской переменной

classAPI { 
    public responseCode = ""; 
    public responseMessageLog =""; 
    function run{ 
     // here I call my user auth class 
     $oUser = new classUser(...); 
    } 
} 

Внутри моей classUser я делаю кучу вещей, а затем написать кучу переменных: responseMessageLog (который запуск журнала, где был запущен скрипт) и responseCode (который установлен в 0 или 1 или любой другой в зависимости от успеха или отказа или предупреждения).

Мне нужно получить доступ к моим переменным responseCode и responseMessageLog из моего класса User и моего родительского класса API, но я действительно не хочу передавать эти переменные в каждый дочерний класс, а затем передавать их обратно. Мне бы хотелось, чтобы при обновлении переменной в дочернем классе она обновлялась везде во всем моем классе ... вроде глобальной переменной ... но я знаю, что это не очень хорошая идея.

Как другие остановили передачу переменных по кроличьей тропе классов.

в этом классе I

ответ

0

Попутных зависимостей не кроличья норы вы хотите избежать - это делает для более проверяемой коды. Однако вам не нужно передавать каждое свойство, вы можете передать родительский объект.

В вашем случае просто передайте объект classAPI в конструктор classUser и в конструкторе присвойте его свойству. Свойства classAPI являются общедоступными, поэтому вы можете получить к ним доступ в экземпляре classUser.

ClassAPI { 
    public $responseCode = ""; 
    public $responseMessageLog =""; 

    public function run{ 
     // here I call my user auth class 
     $oUser = new ClassUser($this, ...); 
     } 
    } 

ClassUser { 
    public $myClassApi = null; 

    public function __construct(ClassAPI $myClassApi) { 

     $this->myClassApi = $myClassApi; 
     } 

    public function someFunction() { 
     echo $this->myClassApi->responseCode; 
    } 

    } 

Добавлено отмечает:

  • В случае речь идет в другом ответе, не использовать статические свойства, чтобы делать то, что вы пытаетесь сделать.
  • Заполните ваши имена классов.
  • В производственном коде я мог бы добавить функцию инициализации в ClasUser вместо передачи ClassAPI непосредственно в конструктор.
+0

о, действительно! dang, мелочи, которые вы, как правило, забываете ... позвольте мне попробовать это ... –

+0

Могу ли я вызвать методы, подобные этому? –

+0

@NathanLeggatt, если они являются общедоступными (не закрытыми или защищенными) – Ray

Смежные вопросы