Получение переменных из объекта php

200
12 апреля 2018, 12:14

Создан объект А. Внутри него в методе создается объект Б (другого класса). Из объекта Б вызывается метод. Можно ли как нибудь получить переменные объекта А, в методе объекта Б, если они не переданы явно и не являются глобальными?

Answer 1

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

Answer 2

Если свойства объекта А публичные или есть методы, возвращающие их (гетеры), можно передать объект А в объект Б и тогда можно из методов объекта Б получить доступ к свойствам А.

Если передать объект А в объект Б нельзя или у объекта А нет публичных свойств, то доступ получить нельзя. (На самом деле если объект передать можно, но публичных свойств нет, то доступ получить все же можно - через рефлексию, но делать это КРАЙНЕ не желательно. Ну или очень хорошо понимать что и зачем делаете)

Пример

class A {
    public $prop;
    public function doWork() {
        $b = new B();
        $b->execute($this);
    }
}
class B {
    public function execute(A $a) {
        echo $a->prop;
    }
}
Answer 3

Можно передать в конструктор:

class A {
 public function run() {
  $obj = new B($params);
 }
}

Можно передать в качестве аргумента метода:

class A {
 public function run() {
  $obj = new B();
  $obj->method($params);
 }
}

Можно присвоить свойствам класса Б.

class A {
 public function run() {
  $obj = new B();
  $obj->params = $params;
  $obj->method();
 }
}
class B {
 public $params;
 public method() {
  // TODO $this->params
 }
}
READ ALSO
обмен данными в cache yii2

обмен данными в cache yii2

Есть большая бдНужно выгрузить все данные в cache (сделано)

159
Сломалась корзина на PrestaShop

Сломалась корзина на PrestaShop

Доброго дня всем По неизвестной причине перестала работать корзинаСайт https://alccosttore

207
Как правильно разложить POST запрос?

Как правильно разложить POST запрос?

Отправляю данные ajax-ом:

212
laravel vue.js не видит переменную

laravel vue.js не видит переменную

Связался я с vuejs, прочитал кучу отзывов, что это легко и просто иии попал сразу же

216