Черты в PHP
Существует ли множественное наследование в PHP? Трейты – это механизм, введенный в язык PHP для устранения ограничений одиночного наследования и создания эффекта множественного наследования.
Согласно документации PHP, Traits — это механизм повторного использования кода в языках с одинарным наследованием, таких как PHP. Преднамеренно, трейты введены в язык PHP, чтобы устранить ограничение одиночного наследования и дать представление о множественном наследовании. В отличие от других языков ООП, PHP не поддерживает концепцию множественного наследования. Чтобы быть точным, в PHP дочерний класс не может быть производным более чем от одного родительского класса. Следовательно, Traits — это стратегия, которая играет важную роль в PHP, чтобы избавиться от ситуации. По сути, черта может быть определена с помощью ключевого слова trait и может быть вставлена в класс с помощью ключевого слова use. Тем не менее, Черты не могут быть реализованы сами по себе в течение их жизни. И последнее, но не менее важное: Traits могут определять как свойства, так и методы, но они не могут определять константы.
Начиная с PHP 5, понятие Trait представляет собой набор методов и свойств, которые можно использовать для расширения функциональности класса. Кроме того, внутренний механизм объединения трейтов и классов разработан таким образом, что снижает сложность, а также дает возможность создавать более стандартный и читаемый код.
Между прочим, я написал плодотворную статью об интерфейсах, трейтах и абстрактных классах, в которой трейты сочетаются с другими объектно-ориентированными функциями PHP. На статью можно перейти по этой Ссылке. Кроме того, документацию PHP по Traits также можно найти по этой Ссылке.
Трейты в PHP предлагают множество функций, таких как классы, но только некоторые из них я использовал здесь, чтобы сделать примеры максимально простыми и целеустремленными. Хотя я представил два примера, но второй — это всего лишь статическая версия первого, которая немного короче. Тем не менее, оба примера будут работать для получения билетов для бронирования авиабилетов. Примеры показаны ниже:
- traits.php
- traits_static-version.php
По сути, структура черты очень похожа на структуру класса. В приведенных ниже примерах мы определили FlightServices и FlightInfo как Traits, которые содержат как неабстрактные, так и абстрактные методы. Теперь кто-нибудь из аудитории может задать вопрос: что такое абстрактный метод? Метод, который не получает никакой реализации, точнее, метод, который не содержит тела, известен как абстрактный метод. Кроме того, эти абстрактные методы должны быть реализованы расширяющими Traits и классами. Как видно из следующих примеров, абстрактные методы sit() и food() были реализованы классами Economic и Business.
Что важно упомянуть в примерах о трейтах, так это то, что трейты FlightServices и FlightInfo содержат разные методы для выполнения бронирования рейсов для экономического и бизнес-класса. Если бы FlightServices и FlightInfo были классами, а не Traits, ни экономический, ни бизнес-класс не смогли бы расширять оба («классы») одновременно, поскольку PHP не поддерживает множественное наследование, в отличие от некоторых других языков ООП. Удивительно, но PHP позволяет классу хранить более одного Trait одновременно, что несколько уменьшает отсутствие множественного наследования.
В следующем коде, благодаря поддержке объекта FlightBooking, сначала мы можем создать объект, либо экономический, либо бизнес, а затем мы можем подтвердить бронирование рейса, выполнив метод confirmFlight(). В целом тикет делается с помощью метода ticket().
//........ class FlightBooking { //..... protected function ticket($c) { //.......... } public function confirmFlight($category) { $category = new $category; $this->ticket($category); } } $f = new FlightBooking(); //....... $f->confirmFlight($class); // where $class is either 'Economic' or 'Business'
Теперь можно мечтать лететь к месту назначения в зависимости от стоимости перелета, не так ли?
Полный код для примера trait.php приведен ниже:
Полностью статическая версия примера, которая является немного утонченной версией первого примера, приведена ниже:
Подводя итог, чтобы получить некоторый аромат множественного наследования в этой статье, я сосредоточился только на основных функциях трейтов и выполнил определенные операции, комбинируя трейты с классами.
Мы будем очень признательны за любые ваши ценные комментарии и предложения по поводу статьи, кроме ваших аплодисментов.
Файлы строк PHP для этой статьи, а также другой программный код для различных тем можно найти в моем репозитории GitHub.
Спасибо!