PHP: Замена массива по умолчанию на определенный пользователем массив? (Заменить / комбинат) - PullRequest
0 голосов
/ 03 января 2011

Я пишу небольшую структуру для себя, чтобы помочь построить мой сайт, мой текущий пример - объектная функция для запуска HTML-страницы, она будет запускаться так:

$page->head(array(
    'doctype' => 'html4',
    'description' => 'My page'
    //etc
));

Я хочу иметьмассив по умолчанию (как определено в head()), чтобы иметь значения по умолчанию, если они не определены.Это может выглядеть так:

$defaults = array('doctype' => 'html5', 'author' => 'default', ...);

Как лучше всего заменить каждый элемент по умолчанию на элемент, определенный в аргументах функции head при вызове?

Я нашел что-то вродеэто, будучи неуверенным в том, что именно он делает, но у него правильная идея http://www.php.net/manual/en/function.array-replace.php#94458

Ответы [ 2 ]

2 голосов
/ 03 января 2011

Похоже, что вы можете сделать это с помощью array_merge, например:

$page->head(array_merge($defaults,array(
  'doctype' => 'html4',
  'description' => 'My Page'
  // etc
)));

Это перезапишет любое значение из $defaults новым значением, сохранив любой ключ, который не имеетновое значение.

0 голосов
/ 03 января 2011

Есть ли причина, по которой вы не используете классы для этого? Это звучит как проблема, которая выиграет от ООП. Например:

class PageHeader
{
    private $m_sDoctype;
    private $m_sDescription;
    // other member vars, such as an array of css files

    function __construct($doctype, $desc)
    {
        // set your default values
        $this->m_sDoctype = _isset($doctype) && $doctype != null ? $doctype : 'html4';
        $this->m_sDescription = _isset($desc) && $desc != null ? $desc : 'My Page';
    }

    function render()
    {
        // dump out html however you see fit
    }
}

class BasePage
{
    private $m_oPageHeader;
    // other member vars

    function __construct($doctype, $desc)
    {
         $m_oPageHeader = new PageHeader($doctype, $desc);
    }

    function render()
    {
        $this->m_oPageHeader->render();
    }
}

index.php (или ваша домашняя страница):

var $page = new BasePage(null, 'Home Page');
$page->render();

Пара замечаний:

  1. Это очень упрощенный пример что я не проверял
  2. Я знаю, что это не совсем то, что вы искали (как вы были ищу решение для вашего массива проблема), но я разрабатывал небольшой каркас для себя, это безусловно, так, как я бы пошел делать это, поскольку есть явные преимущества использовать ООП в любой среде.

Редактировать: я забыл упомянуть, что, используя конструкторы со значениями по умолчанию, вы получаете желаемую функциональность с наличием значений по умолчанию, но также с возможностью их перезаписи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...