Как вы применяете аргументы вашего метода PHP? - PullRequest
3 голосов
/ 11 января 2011

Как вы проверяете / управляете аргументами вашего метода PHP и почему вы делаете это таким образом?

Ответы [ 2 ]

17 голосов
/ 11 января 2011

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

  1. Если он ожидает объект, я использую подсказку типа с интерфейсом:

    public function foo(iBar $bar)
    
  2. Если ожидается только массив, я использую подсказку типа с ключевым словом array.

    public function foo(array $bar)
    
  3. Если он ожидает строку, int, bool или float, я разыгрываю его:

    public function foo($bar) {
        $bar = (int) $bar;
    }
    
  4. Если он ожидает смешанного, я просто проверяю каскад:

    public function foo($bar) {
        if (is_string($bar)) {
            //handle string case
        } elseif (is_array($bar)) {
            //...
        } else {
            throw new InvalidArgumentException("invalid type");
        }
    }
    
  5. Наконец, если ожидается многократный тип, я не использую подсказки типов.Сначала я проверяю, является ли это массив, а затем повторно загружает итератор:

    public function foo($bar) {
        if (is_array($bar)) {
            $bar = new ArrayIterator($bar);
        }
        if (!$bar instanceof Traversable) {
            throw new InvalidArgumentException("Not an Iterator");
        }
    }
    
  6. Если он ожидает имя файла или каталога, просто подтвердите его с помощью is_file:

    public function foo($bar) {
        if (!is_file($bar)) {
            throw new InvalidArgumentException("File doesn't exist");
        }
    }
    

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

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

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

 function xyz($a, $b) {
     assert(is_array($a));
     assert(is_scalar($b));

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

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