Ежемесячный отчет PHP - использование черт

26 октября 2017 г.

Все мы хорошо знаем, что PHP поддерживает только одиночное наследование, то есть класс может наследовать только от одного другого класса, а множественное наследование не поддерживается. Если бы только он поддерживал множественное наследование, это упростило бы жизнь программистам, позволив нам наследовать методы из пары разных классов без дублирования кода. Вы можете быть удивлены, дублирование кода? Что делать с дублированием кода при наследовании? Но это правда, что, реализуя наследование, мы просто обращаемся к существующему классу, просто указывая, что отличается, вместо того, чтобы создавать новый класс с нуля. Так что да, это позволяет нам более эффективно организовывать и повторно использовать код, избегая, следовательно, дублирования кода.

Поэтому, чтобы заполнить этот пробел, 1 марта 2012 года был выпущен PHP 5.4, и нам была представлена ​​новая функция, известная как trait. В официальной документации признаки определены как: «Признак предназначен для снятия некоторых ограничений одиночного наследования, позволяя разработчику свободно повторно использовать наборы методов в нескольких независимых классах, находящихся в разных иерархиях классов». Проще говоря, черта - это группа методов или фрагмент кода, который мы можем легко включить в другой класс и уменьшить дублирование кода и получить преимущества, избегая проблем множественного наследования. Trait похожи на абстрактный метод, потому что они не могут быть созданы. Как мы можем узнать, что это за черта? Просто и легко это определяется ключевыми чертами. Ниже приведен один хороший пример:

trait Reusable {

повторное использование общедоступной функции ($ переменная) {

вернуть переменную $;

}

}

Теперь мы можем включить его в любой класс:

class Test {

использовать многоразовый;

}

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

$ test = новый тест ();

echo $ test- ›reuse (« Мы реализовали трейты! »); // выводит: «Мы реализовали черты характера!»

Но как это работает, мы можем задаться вопросом, это просто код «скопировать и вставить» во время выполнения. Теперь у нас может возникнуть другой вопрос: зачем использовать черту? Во многих случаях классы совершенно не связаны между собой, но они могут нуждаться в тех же функциях, которые предоставляет метод, а затем приходит черта, которая нас спасет. Хорошим примером этого является код подключения к базе данных, потому что это в основном код многократного использования, и мы можем легко использовать его в качестве признака. Здесь все неясно, возможно, у нас в голове что-то вроде «почему бы не использовать интерфейс или абстрактный класс, зачем вводить черту?», Что ж, я тоже объясню это. Интерфейс может содержать только методы, но не реализацию, поэтому признаки, вероятно, являются лучшим вариантом для этого случая, и при использовании абстрактного класса мы должны наследовать его, и иногда он может создавать неоднозначное наследование.

Хотя я уже упоминал о различных преимуществах трейта, у него есть и недостатки. Иногда мы можем вносить изменения в признак, думая, что он внесет изменения в один класс, но это может создать проблему в другом классе, использующем его, поэтому мы должны подтвердить весь класс, использующий его, прежде чем вносить какие-либо изменения. Поскольку в traits появилась идея множественного наследования, это наверняка вызовет проблемы с именованием.

Таким образом, возникает очевидный вопрос: «Действительно ли черта полезна?» Я думаю, что это полезно, потому что трейт позволяет нам добавлять функциональные возможности в наши классы по горизонтали без чрезмерного усложнения или дублирования кода, и кто знает, что он может быть обновлен и более функциональным, чем сейчас. Я надеюсь, что теперь у вас есть хорошее представление о трейте, я надеюсь, что вы наверняка воспользуетесь им сейчас, имея хорошее представление о нем. Удачного кодирования, ребята!

Автор: Рошан Ранабхат,
разработчик PHP,
EKbana Solutions.