В начале марта 2012 года PHP Group объявила о выпуске PHP 5.4. Разработчик с нетерпением ждал релиза из-за множества новых функций, которые принесет 5.4, наиболее востребованными из которых являются черты. В процессе подготовки к выпуску Shameer C написал фантастический обзор использования черт в PHP , и я настоятельно рекомендую прочитать статью Shameer до этого, потому что я предполагаю, что у вас есть базовое понимание черт.
Черты были широко приняты сообществом разработчиков PHP, главным образом потому, что эта функция существует в других языках программирования, таких как Java, C ++ и Phython. Кроме того, преимущества признаков широко рекламировались, и разработчики дают свои собственные два цента о том, как характеристики могут принести пользу любому проекту, особенно в качестве замены наследования ООП. Но так ли хороши черты? Являются ли они функцией, которая поможет поднять уровень развития PHP, или они просто причуда?
PHP черты плохи
На первый взгляд, существует сильная поддержка свойств PHP, потому что их использование может помочь уменьшить дублирование кода во всем приложении. Кроме того, они могут помочь улучшить удобство сопровождения и чистоту вашего кода.
Черты, безусловно, приветствуются, но многие ведущие разработчики опасаются, что их можно использовать способами, которые никогда не предназначались. Энтони Феррара является одним из таких разработчиков, и его страх заходит так далеко, что он рассматривает возможность того, что черты станут следующей наиболее злоупотребляемой функцией наряду с eval и константами. Но до того, как Энтони высказывает свое мнение, он поднимает очень интересный вопрос: черты — это набор специфических миксинов, которые по существу не имеют состояния. Реализация признаков в PHP позволяет использовать состояния, и поэтому признаки в PHP на самом деле являются смешанными. Этот простой факт ставит под сомнение истинное намерение особенностей PHP, поскольку в конечном итоге они находятся под ложным флагом. Нет никакого объяснения относительно того, почему черты фактически обрабатываются как миксины, а не как общепризнанные миксины без сохранения состояния, которыми они должны быть.
Энтони продолжает, ссылаясь на то, что черты очень близки по функциональности к тому, что расширяют нас в отношении объединения классов вместе. Так как extends являются уважаемой и давно используемой функцией, справедливо будет спросить, действительно ли черты имеют место в PHP, или они пытаются встать на плечи существующих функций, пытаясь выглядеть высокими?
Тогда есть также вопрос интерфейсов. Многие разработчики имеют смутное представление о том, какова реальная разница между интерфейсами и особенностями; их способность к повторному использованию очень похожа, и глубина наследования, возможная для них, также очень похожа. Являются ли черты на самом деле чем-то новым для PHP, или они действительно просто обновление интерфейсов?
PHP-черты хороши
Независимо от оставшихся без ответа вопросов, черты отлично подходят для PHP, что позволяет нам создавать несколько сценариев наследования (extends поддерживает только одиночное наследование).
Одиночное наследование используется уже много лет и является неотъемлемой частью объектно-ориентированного программирования на PHP, которое ограничивает опытных программистов в разработке сложных систем, сохраняя при этом код чистым и минимальным. В других языках множественное наследование может использоваться для устранения дублирующегося кода в таких ситуациях. Но множественное наследование невозможно в PHP. Вместо этого интерфейсы предлагаются в качестве замены, и в этом случае неудачный.
Интерфейсы не предназначены для использования таким образом, скорее, чтобы действовать как контракты, которые заставляют любые классы, которые реализуют его, предоставлять свою функциональность. Это может помочь открыть соединение классов и методов, но не предлагает истинную замену множественного наследования в PHP.
Несколько разработчиков пытались создать несколько креативных решений для множественного наследования в PHP, но многие из них раздуты, что делает общий результат избыточным и скорее экспериментальным, чем практическим решением.
При использовании признаков множественное наследование может быть реализовано естественным образом с использованием оригинальных систем. Как показал Шамеер в своем введении к чертам, вы можете создать несколько черт внутри классов. Джон Сквибб использует несколько признаков для создания среды множественного наследования в своем примере 2011 года .
Многие программисты считают, что множественное наследование — это зло, ссылаясь на Алмазную проблему , и утверждают, что одиночное наследование дает меньше головной боли. Дело в том, что с PHP не практичность реализации множественного наследования, а скорее символика, которая приходит с возможностью реализации множественного наследования. Это стало еще более важным в свете того, что многие программисты заявляют о своей неприязни к PHP, что очевидно, если вы Google «не используете PHP». С возможностью множественного наследования PHP становится более сложным, более выразительным и более приемлемым языком программирования, а не просто «самым распространенным языком в сети». Я нахожу это невероятно утешительным, когда программисты на Java, Python или C ++ пытаются отклонить PHP из-за отсутствия поддержки стандартизированных методов программирования в разных языках.
Черты являются истинным свидетельством того, что PHP медленно и обязательно становится языком, который будет охватывать все больше и больше стандартных методов программирования, надеясь победить многих более опытных программистов и разработчиков.
Вывод
Черты позволяют разработчикам PHP создавать более чистый, простой и эффективный код, а также позволяют создавать и экспериментировать с более сложными системами.
Они не хороши; они фантастические! Они открывают новый уровень методов разработки для программистов ООП, использующих PHP, и я считаю, что они являются признаком того, что будет в будущих версиях PHP.
Для получения дополнительной информации по темам, упомянутым в этой статье, в том числе о самих чертах характера, пожалуйста, перейдите по следующим ссылкам:
- Блог Ircmaxell: черты новый Eval?
- Блог программиста Джона Сквибба: множественное наследование в PHP 5.4 с использованием черт
- AzonMedia: множественное наследование в PHP — обходной путь
- Refulz PHP: черты в PHP 5.4 — зачем нужны черты
- Christer’s Blog o’Fun: игра с чертами в PHP 5.4alpha1
- Slideshare: черты PHP, угроза или угроза?
- Refulz PHP: черты в PHP — множественные и вложенные черты
Изображение через Fotolia