Как я могу высушить этот php

#php

Вопрос:

У меня есть эта функция, которая очень хорошо работает для того, что я хочу, чтобы она делала:

 function textStyles($prefix, $position, $type){
    $title = get_sub_field($prefix . '_' . $position . '_font_' . $type);
    $titles = get_sub_field($prefix . '_' . $position . '_font_' . $type);
    $titleNG = get_field($prefix . '_' . $position . '_font_' . $type);
    $titleOption = get_field($prefix . '_' . $position . '_font_' . $type, 'options');
    $titleTheme = get_theme_mod( 'hero_text_' . $type, 0 );
    
    return $title ?: $titles ?: $titleNG ?: $titleOption ?: $titleTheme;
}
 

Но затем, чтобы использовать его, я делаю такие вещи, как это:

 $titleSize = textStyles($sepPrefix, 'title', 'size');
$titleColor = textStyles($sepPrefix, 'title', 'color');
$titleWeight = textStyles($sepPrefix, 'title', 'weight');
$titleAlign = textStyles($sepPrefix, 'title', 'alignment');

$titleClass = $titleSize . ' ' . $titleColor . ' ' . $titleWeight . ' ' . $titleAlign;

$introSize = textStyles($sepPrefix, 'intro', 'size');
$introColor = textStyles($sepPrefix, 'intro', 'color');
$introWeight = textStyles($sepPrefix, 'intro', 'weight');
$introAlign = textStyles($sepPrefix, 'intro', 'alignment');

$introClass = $introSize . ' ' . $introColor . ' ' . $introWeight . ' ' . $introAlign;
 

Я уверен, что должен быть СУХОЙ способ сделать это, но я даже не уверен, как его искать!

Ответ №1:

Вы могли бы сделать что-то вроде этого

 function textClass($prefix, $position, $attrs)
{
    $classes = [];
    foreach ($attrs as $attr) {
        $classes[] = textStyles($prefix, $position, $attr);
    }
    return implode(' ', $classes);
}
 

А затем назовите его с нужными вам атрибутами примерно так:

 $introClass = textClass($sepPrefix, 'intro', ['size', 'color', 'weight', 'alignment']);
 

Комментарии:

1. Блестяще! Работает очаровательно и позволяет мне задавать меньше параметров, как мне иногда нужно. Спасибо!