Должен ли код метода класса напрямую обращаться к внешним переменным? - PullRequest
0 голосов
/ 23 июня 2009

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

В одном методе используется переменная DEFINEd в файле конфигурации, цель которой - быть доступной для каждой части приложения, которая в ней нуждается. Мне кажется, это нормально.

Другой метод напрямую обращается к переменной $ _GET. Есть код, который обрабатывает случай, когда этот var не установлен, но почему-то это пахнет для меня.

Должны ли я заниматься этими двумя случаями или у меня должно быть строгое соглашение о передаче аргументов?

Ответы [ 2 ]

1 голос
/ 23 июня 2009

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

class Bla
{
    public function blaBla($var = false)
    {
        if(!$var && isset($_GET))
            $var = $_GET;
        // ...
    }
}

$bla = new Bla();
$bla->blaBla();
$bla->blaBla($_GET);

Мне также не нравится метод define () (я предпочитаю реестр с одноэлементной переменной, такой как реестр Zend Framework). Одна большая проблема заключается в том, что вы больше не можете изменять определения. Это может быть хорошо или нет. Я работал над частью программного обеспечения, где часть define () была зашифрована, и поэтому больше не было возможности изменить это, даже если у них были «хуки» по всему исходному коду (но позвольте методам класса использовать определения вместо передачи его как аргумент ... это очень плохая архитектура в моих глазах).

1 голос
/ 23 июня 2009

Попробуйте смоделировать запрос (http) и файл конфигурации и получить доступ к этим переменным через API этих моделей.

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