Массивы и одиночные переменные - PullRequest
0 голосов
/ 30 декабря 2010

Недавно я столкнулся с проблемой проектирования PHP. Я заметил, что в функции вы можете передать в качестве параметра массив. Сначала я не заметил сильные стороны этой вещи, но теперь я одержим массивами.

Например, в моем классе шаблонов я должен передать некоторые переменные и некоторые mysqli_results в файл шаблона (как это делает phpbb). И мне было интересно, какая из следующих возможностей является лучшей.

# 1
$tpl = new template(array(
    'vars' = array('var1' => 'val1', 'var2' => 'val2'),
    'loops' = array('loop1' => $result1, 'loop2' => $result2)
));

# 2
$tpl = new template;
$tpl->assignVars(array(
    'var1' => 'val1', 
    'var2' => 'val2'
));
$tpl->assignloops(array(
    'loop1' => $result1,
    'loop2' => $result2
));

# 3
$tpl = new template;
$tpl->assignVar('var1', 'val1');
$tpl->assignVar('var1', 'val1');
$tpl->assignLoop('loop1', $result1);
$tpl->assignLoop('loop2', $result2);

Или, если есть что-то лучше. Я даже думал о создании класса БД, который выполняет запрос следующим образом:

$result = $db->fastQuery(array(
        'select' => 'user-name',
        'from' => $table,
        'where' => array('user-id' => 123, 'user-image' => 'none'),
        'fetch' => true
    ));

Боже мой, я действительно одержим.

Ответы [ 2 ]

1 голос
/ 30 декабря 2010

Если бы это зависело от меня, я бы выбрал # 1, мне не нравятся вложенные объекты и массивы, только если это необходимо. тем самым я сохраняю свой код простым. и если вы будете следовать своей навязчивой идее, вы можете написать полный ORM.

1 голос
/ 30 декабря 2010

# 4

Разрешение обоих:

function assign($name, $val = null)
{
    if (is_array($name)) {
        // loop through and assign
    } else {
        // assign single var
    }
}

Это похоже на методы перегрузки, которые вы видели бы в C ++ / Java.

Youтакже можно разрешить # 1, просто вызвав assign в конструкторе.В программировании ООП не редкость, когда конструктор допускает ярлык для установки свойств, которые также могут быть установлены в других методах.

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