PHP Variable vs Array vs Object

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

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

простой var:

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

массив:

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

Объект:

 $tpl->title = 'my title' $tpl->desc = 'my text' 

Мне нравится метод объекта лучше всего, поскольку он выглядит чистым, когда echo'd внутри html, в отличие от массивов и afaik, он может использоваться в виде массива? Однако, что я хочу знать, является ли использование объектов таким образом, считается плохой практикой или вводит лишние накладные расходы?

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

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

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

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

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

 $object = (object)$array; 

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

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

Массивы

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

Синтаксис

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

На бэкэнде вы установили
$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(); } 

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

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

Поэтому я бы сказал, массивы!

Кроме того, есть тонны собственных функций 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-файл.

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

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

Помимо этих массивов и объектов более симметрии в коде и объяснения, чем обычные переменные