oop — ссылка на класс PHP для родительской переменной

Я строю службу API и у меня есть родительский класс:

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, но на самом деле я не хочу передавать эти переменные в каждый дочерний класс, а затем передавать их обратно. Мне бы хотелось, чтобы когда я обновлял переменную в дочернем классе, она обновлялась везде во всем моем классе … вроде как глобальная переменная … но я знаю, что это не очень хорошая идея.

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

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

1

Решение

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

В вашем случае просто передайте 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 прямо в конструктор.
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]