использование классов вместо глобальных функций в functions.php

<p>во многих темах, которые я видел (включая twentyeleven) и в примерах, которые я нашел в интернете, при создании файла <code>functions.php</code> для темы вся функциональность объявляется в глобальной области видимости. чтобы уточнить, вот как выглядит типичный файл функций:</p><pre><code>function my\_theme\_do\_foo() { // ... } function my\_theme\_do\_bar() { // ... } add\_action( 'foo\_hook', 'my\_theme\_do\_foo' ); </code></pre><p>мне кажется, что вещи могли бы быть "инкапсулированы" немного лучше, если бы использовался класс:</p><pre><code>class mytheme { function do\_foo() { // ... } function do\_bar() { // ... } } $my_theme = new mytheme(); add_action( 'foo_hook', array( &$my\_theme, 'do\_foo' ) ); </code></pre><p>преимущества второго подхода (на мой скромный взгляд):</p><ul> <li>более короткие имена функций</li> <li>доступ к переменным экземпляра (самое большое преимущество imo)</li> <li>нет глобальных функций</li> </ul><p>недостатки:</p><ul> <li>имя класса все еще может вызывать конфликты</li> <li>не так ясно, чтобы "настроить" с дочерней темой (придется расширить родительский класс)</li> <li>большинство тем не сделали это таким образом, так что вы бы противостоять тенденции</li> </ul><p>я, наверное, упускаю из виду некоторые вещи, но мне интересно, почему бы не воспользоваться подходом oop? это чувствует себя немного "чище" для меня, если что-нибудь. возможно я ошибаюсь?</p><p>я довольно новичок в разработке тем wordpress, так что извините, если это общеизвестно в сообществе wp :). просто пытаюсь понять, почему вещи такие, какие они есть.</p>

<p>использование класса для инкапсуляции является очень распространенным подходом многих разработчиков для плагинов. я делаю это, и я нахожу это чище. но для плагинов. темы носят более процедурный характер.</p><p>мы не делаем это для стандартных тем wordpress, потому что это повышает барьер для входа. функции довольно просты. удаление действий, связанных с классами, может быть затруднено (и может привести к ошибкам в определенных обстоятельствах).</p><p>кроме того, ряд функций в темах по умолчанию являются подключаемыми. расширение класса и замена методов намного сложнее, чем просто определение функции. и хотя два разных аспекта кода могут заменять разные функции, вы не можете динамически расширять классы. как вы указали, необходимость расширения родительского класса определенно является недостатком.</p><p>я подумывал о том, чтобы сделать код темы опций twenty eleven классом, но так и не смог обойти его. такая отдельная, подобная плагину функциональность кажется хорошим кандидатом для инкапсуляции.</p>