PHP: Приоритет при вызове трейтов
Это не совсем статья, а скорее заметка - ответ на вопрос. Итак сам вопрос: есть два трейта с одинаковыми методами, а так же такой же метод в классе использующим этот метод. Что произойдет при попытке запуска такого скрипта..
Пример выглядит так
И ответ в данном случае: ошибок не будет, будет вызван метод определенный в классе, т.е. скрипт выведет
Когда мне задали этот вопрос, я покапался в своих воспоминаниях и точно помнил, что сталкивался с нечто подобным, и тогда мне нужно было все таки указывать какой метод нужно использовать.. странно, мб что-то напутал.. Но, нет, просто у меня была другая ситуация - методы были объявлены только в трейтах, а не в классе:
приведет к
и устраняется это именно указанием какой метод будет использоваться, вот так
Выведет
Итак, в подобном случае надо помнить про приоритет вызовов:
- В случае если в классе будет объявлен метод, с таким же именем как в трейтах, то будет использоваться именно он и никаких ошибок не будет
- В случае, если в классе НЕТ такого метода, а в трейтах есть методы с одинаковыми именами, будет Fatal Error. Устранить его можно указав какой метод надо использовать с помощью ключевого слова insteadof.
Вот такая особенность.
Author: | Tags: /
| Rating:
Leave a Reply