Main > PHP > PHP: Приоритет при вызове трейтов

PHP: Приоритет при вызове трейтов

23.08.2019 0 comments » Views: 650

логотип PHP 7

Это не совсем статья, а скорее заметка - ответ на вопрос. Итак сам вопрос: есть два трейта с одинаковыми методами, а так же такой же метод в классе использующим этот метод. Что произойдет при попытке запуска такого скрипта..

Пример выглядит так

И ответ в данном случае: ошибок не будет, будет вызван метод определенный в классе, т.е. скрипт выведет

Когда мне задали этот вопрос, я покапался в своих воспоминаниях и точно помнил, что сталкивался с нечто подобным, и тогда мне нужно было все таки указывать какой метод нужно использовать.. странно, мб что-то напутал.. Но, нет, просто у меня была другая ситуация - методы были объявлены только в трейтах, а не в классе:

приведет к

и устраняется это именно указанием какой метод будет использоваться, вот так

Выведет

Итак, в подобном случае надо помнить про приоритет вызовов:

  • В случае если в классе будет объявлен метод, с таким же именем как в трейтах, то будет использоваться именно он и никаких ошибок не будет
  • В случае, если в классе НЕТ такого метода, а в трейтах есть методы с одинаковыми именами, будет Fatal Error. Устранить его можно указав какой метод надо использовать с помощью ключевого слова insteadof.

Вот такая особенность.

Author: | Rating: 4/5 | Tags: ,

Leave a Reply

Your email address will not be published. Required fields are marked *

Allowed HTML-tags: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>