Стоит ли выносить функции, расширяющие функционал плагина за пределы класса?

Привет всем.
У меня в классе имеется небольшая функция, создающая табы. На нее я вешаю с помощью фильтра создание новых табов. Вопрос вот в чем: базовые вкладки я забил прям внутри класса таким образом:

// Profile Tabs	
public static function profile_page( $tabs ) {						
	$tabs['ay_profile_data_fields'] = array(
		'title'    => 'General',
		'callback' => array( 'PublicProfilePlugin', 'profile_data_fields_content' ),
	);
	$tabs['ay_profile_subscriptions'] = array(
		'title'    => 'Subscriptions',
		'callback' => array( 'PublicProfilePlugin', 'ay_profile_subscriptions_content' ),
	);
	return $tabs;
}


Но что-то меня тут смущает. Как оптимальнее разместить функции, расширяющие функционал плагина?
  • Вопрос задан
  • 53 просмотра
Решения вопроса 1
Outcomer
@Outcomer
Решаю сложные задачи
Раздели задачу на неделимые компоненты. Метод (лучше говори метод) твоего класса создает закладки, параметры которых сам и определяет. Но пусть эти параметры станут аргументом этого метода. Создай файл с конфигурационным массивом этих закладок и передай этот массив в качестве аргумента методу, который их обработает и создаст нужное поведение или события.
Если конфигурационный массив окажется в самостоятельном классе ты сможешь, создав в нем нужный метод, получить эту конфигурацию в любом месте кода.
В конечном счете однажды, ты сможешь создать где-то интерфейс для конструирования вкладок. Потому что все, что останется сделать - приводить результат сохранения конструктора к форме конфигурационного массива.
Сохранил пользователь конструктор вкладок - записали в базу эти данные как массив.
Рисуем вкладки - получили из базы этот массив и отдали методу как аргумент, вместо файла.
Если метод не может получить ничего лишнего, потому что он вызван фильтром - запроси конфигурацию из файла внутри него или используй его как анонимную функцию с директивой USE, так ты сможешь передать внутрь обработчика хука дополнительные данные. Но анонимный обработчик чреват - его невозможно удалить, потому что нет имени по которому можно к нему обратиться. Вернее есть, но всякий раз разное.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы