method_exist для трейтов

175
12 октября 2017, 12:37

В Yii2 есть понятие behaviors, подключение к модели которого добавляет к классу функции, описанные в этом behavior.

А можно ли проверить для объекта is_callable или method_exists наличие этого метода? Ведь метод не описан явно в классе, а внедрен через behavior.

Answer 1

Очевидно, что в том время как трейты являются стандартным средством расширения функционально классов на уровне языка, то behaviours являеются надстройкой фреймворка. В связи с этим знаниями и инструментариями о том имеется ли у объекта данный метод, должен обладать сам объект, к которому поведение подключается. То есть если класс может подключать поведения, то, очевидно, должен знать какие поведения подключены, и какими методами они его наделяют.

Для определения, имеет ли компонент метод, полученный от поведения, используйте Component::hasMethod()

Returns a value indicating whether a method is defined. A method is defined if:
- the class has a method with the specified name
- an attached behavior has a method with the given name (when $checkBehaviors is true).

т.е. hasMethod() определяет наличие искомого метода среди членов класса, а также среди методов подключенных поведений.

зы: познакомился с Yii :D

READ ALSO
Изменение текстового поля на форме из потока (2 окна) QML QT C++

Изменение текстового поля на форме из потока (2 окна) QML QT C++

Пытаюсь изменить значение текстового поля из другого потока, но почему-то не работает: Есть 2 окна, первое окно:

376
Hash Table Неправильный вывод через find

Hash Table Неправильный вывод через find

Где ошибкаХочу узнать какие парные числа, какие нет

234
Тест по технологии CUDA [требует правки]

Тест по технологии CUDA [требует правки]

Укажите вывод программы (“comp”, если программа не скомпилируется и “err”, если произойдет ошибка при исполнении):

215
как подключить BDA device в C++

как подключить BDA device в C++

как подключить PCI Tuner в C++ чтоб потом работать с BDA

230