Я могу понять вашу путаницу, основываясь на приведенном вами примере. Это действительно плохой способ использовать класс ... и только потому, что класс используется, не делает системный ООП.
В случае Hybrid они просто используют класс для пространства имен своих функций. Учитывая, что Hybrid является структурой тем , это делается для того, чтобы дочерние темы могли повторно использовать имена функций без необходимости беспокоиться о конфликте имен. Во многих случаях структура темы (родительская тема) настолько сложна, что многие разработчики дочерних тем никогда не поймут, что именно происходит внутри.
Если бы Hybrid не использовал структуру класса, разработчикам дочерних тем нужно было бы знать, каковы все существующие вызовы функций, чтобы они могли избежать повторного использования имен. И да, вы могли бы просто поставить перед всеми своими функциями уникальный префикс slug, но это делает код трудным для чтения, сложным для сопровождения и по сути одноразовым, если вы разрабатываете дополнительные системы, которые хотят использовать ту же функциональность.
Ответить на ваши вопросы
WTF? Какой смысл делать это? Очевидно, вы не будете использовать два или более экземпляров одной и той же темы одновременно.
Нет, вы не будете использовать два или более экземпляров одной и той же темы. Но, как я уже сказал, представьте, что структура класса в этом случае является пространством имен функций, а не создает традиционный экземпляр объекта. Объединение в единое целое всего класса и создание его экземпляра для вызова методов ( myClass->method();
) или прямого вызова методов ( myClass::method();
) - это очень чистый способ пространства вещей в удобочитаемом, многократно используемом виде.
Конечно, вы всегда можете использовать что-то вроде myClass_method();
этого, но если вы хотите повторно использовать любой из этого кода в другой теме, в плагине или в другом фреймворке, вам придется вернуться назад и изменить все свои префиксы. Хранение всего в классе является более чистым и позволяет вам перестраивать и переделывать намного быстрее.
Давайте предположим, что плагины делают это для пространства имен (что смешно), но в чем извинение темы? Я что-то пропустил?
В большинстве ситуаций я бы с тобой согласился. Тем не менее, это большинство быстро уменьшается. Я размещаю несколько сайтов на установке MultiSite, которые используют варианты одной и той же темы. Вместо того, чтобы заново создавать одну и ту же тему с небольшими отличиями, у меня есть один «класс» для родительской темы, и все дочерние темы расширяют этот класс. Это позволяет мне определять пользовательские функции для каждого сайта, сохраняя при этом общее чувство единообразия по всей сети.
С одной стороны, разработчики тем могут выбрать основанный на классе подход к пространству имен своей функциональности (что не смешно, если вы работаете в среде, где вы снова и снова используете куски одного и того же кода). С другой стороны, разработчики тем могут выбрать подход на основе классов для легкого расширения дочерними темами.
В чем преимущество написания такой темы?
Если вы используете на своем сайте только Hybrid, вам как конечному пользователю будет мало что известно о преимуществах. Если вы создаете дочернюю тему для Hybrid, есть преимущества от пространства имен и расширяемости. Если вы работаете в ThemeHybrid , преимущество заключается в быстром и эффективном повторном использовании кода в других ваших проектах (Prototype, Leviathan и т. Д.).
И если вы разработчик тем, которым нравится определенная функция Hybrid, но не вся тема, преимущество заключается в быстром и эффективном повторном использовании кода в вашем негибридном проекте (при условии, что это также GPL).