PHP переменная vs массив vs объект

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

можете ли вы сказать мне, есть ли какие-либо преимущества / недостатки следующих методов:

простой var:

$tpl_title = 'my title'
$tpl_desc = 'my text'

время:

$tpl['title'] = 'my title'
$tpl['desc'] = 'my text'

7 ответов


Я бы счел это ненужными накладными расходами. Выполнение того, о чем вы говорите, объектно-ориентированным способом означает только то, что внутри вашего класса вы не сделаете ничего, кроме создания группы переменных... как вы и указали в первом примере.

массив-лучший способ пойти, на мой взгляд. Вы используете только одну переменную... и вы также можете интегрировать его в свой класс. Поэтому вместо $tpl - >title У вас может быть $tpl - >text ['title']


в идеальных сценариях каждая переменная должна принадлежать объекту, кроме переменных, локальных для методов для временных целей. Однако мы не живем в идеальном мире, и особенно наши языки программирования далеки от этого. Основываясь на ситуации, выберите лучший способ сделать свою жизнь проще. Если вы используете вещи для шаблонов, как правило, вы храните все данные в массиве и extract массив для получения автономных переменных.

Так что да, Объект метод самый хороший, попробуйте сделать это так много, как вы можете, не тратя сумасшедшее количество времени на это.

также, если вы любите объекты и хотите иметь аккуратный -> способ сделать это, вы можете сделать

$object = (object)$array;

это преобразует Ваш массив в объект.

надеюсь, что это поможет.


массивы

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

синтаксис

используя extract() упрощает синтаксис на интерфейсе, что означает, что у вас всегда будет только $varibles в шаблоне.

на задней панели вы бы set
$array['title'];

Который после извлечения будет в шаблоне
$title;

пример внутренней функции

 protected function fetch($template, $data = null)
    {
        if (!$this->isTemplate($template)) {
            throw new Exception("Template file $this->_templatePath$template not found");
        }
        ob_start();
        if (is_array($data)) {
            extract($data, EXTR_SKIP);
        }
        require $this->_templatePath . $template . EXT;
        return ob_get_clean();
    }

в конце концов, они одинаковы, это зависит от предпочтения, хотя я бы использовал массивы или объекты, потому что вы можете группировать переменные там, поэтому у вас есть вещи лучше отсортированы.

несмотря на то, что метод objects работает, я думаю, что это не естественное предназначение для него.

Так я бы сказал массивы!

кроме того, есть тонны собственных функций php, которые вы можете использовать с массивами, например array_map() или array_filter() сортировок массивов и т. д. и т. п...


на мой взгляд, самый чистый способ настроить его в массиве так:

$tpl = array (
  'title' => 'my title',
  'desc' => 'my text'
);

вы также можете объединить его с ответом Зейна.

всего наилучшего!


$tpl = array (
  'title' => 'my title',
  'desc' => 'my text'
);

Как сказал Горан, с бонусом, что вы можете сохранить эти массивы в ini-файле позже и извлечь их по мере необходимости с parse_ini_file

может быть важно, если вы хотите разрешить пользователям писать свои собственные ini-файл.


массивы и объекты полезны в случае, если вы хотите сбросить объем переменных данных после его использования.

вы можете просто отключить массив или уничтожить объект вместо того, чтобы отключить диапазон переменных, используемых в коде.

кроме этого массивы и объекты имеют больше симметрии в коде и объясняющих, чем обычные переменные