iNickolay
@iNickolay

Как правильно передавать и сохранять данные между классами?

Приветствую! Подскажите пожалуйста, как правильно передавать данные из одного класса, в другой, выводить их и делать прочие манипуляции?

Например, есть класс Debug который принимает какие-то логи. Так же есть класс Cars, который работает с автомобилями.

class Debug {
  var $debug = [];

  function put($what_to_debug) {
    $this->debug[] = $what_to_debug;
  }
  function show() {
    print_r($this->debug);
  }
}

class Cars {
  public $cars_in = [];
  public $cars_out = [];

  function add_car($car) {
    $cars_in[] = $car;
    // как правильно добавить здесь информацию в массив $debug?
  }
}


И вызывается это всё в index.php:
$debug = new Debug();
$cars = new Cars();
$debug->show(); // что бы выведенная информация содержала в себе значения при вызовах из любых классов

Объявлять класс в конструкторе? Не скажется ли это на производительности, если будет много вызовов?
Делать переменную глобальной?
Или другие способы? Что-то я запутался >_<
Как правильно, подскажите пожалуйста :)
  • Вопрос задан
  • 886 просмотров
Пригласить эксперта
Ответы на вопрос 3
@D3lphi
Передавать объект в конструктор, как вариант, через сеттеры. Если эти данные нужны только в этом методе - передавать, непосредственно, в виде аргумента, очевидно. Прочитайте про паттерн Внедрение зависимостей (Это для хранения объектов). Его сейчас используют чуть ли не на каждом шагу.

Не скажется ли это на производительности, если будет много вызовов?


ООП - это всегда медленнее, чем НЕ ООП. Большое количество объектов тормозят систему. Объектно ориентированный подход используют не ради увеличения производительности, а ради улучшения рсширяемости и поддерживаемости кода.
Ответ написан
link_web
@link_web
Magento, Laravel, Zend, Shopify, Prestashop, WP
Паттерн dependency injection
Ответ написан
Комментировать
qonand
@qonand
Software Engineer
Как правило в большинстве случаев построение связей между классами осуществляется с помощью принципа инверсии зависимостей и соответствующих паттернов (в том числе и dependency injection, о котором уже писали). Но в Вашем случае, класс Debug это по сути дела логгер, а значит он не обязателен для работы класса Cars. Логгер - это сквозная функциональность, а значит необходимо использовать либо аспектно-ориентированное програмирование либо паттерн наблюдатель
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы