2015-01-01 3 views
1

Мне было интересно, есть ли разница при установке значения массива по умолчанию как пустой массив или NULL.Объявление необязательного аргумента массива

Например:

function arrayTest(array $array = array()) { 
    if(!empty($array)) { 
     // Do something 
    } 
} 

или

function arrayTest(array $array = NULL) { 
    if(!empty($array)) { 
     // Do something 
    } 
} 

То, что я заметил, что первый пример не позволяет NULL значения должны быть переданы и второй пример делает из отливки типа.

Любые другие отличия? Какой из них следует использовать?

ответ

3

Другое отличие состоит в том, что если вы не передадите аргумент, он будет по умолчанию равен array() или null, которые представляют собой два очень разных значения. Конечно, вы можете это проверить, но вам нужно будет принять это во внимание. empty будет работать для обоих, но цикл foreach над null не будет работать так хорошо, и различные функции массива также потерпят неудачу.

То, что вы заметили правильно: Передача null для аргумента typehinted работает только если вы добавите = null в объявление. Это справедливо не только для массивов, но и для объектов. В PHP в PHP нет способа сделать аргумент typehinted, который является обязательным, но может быть нулевым. Как только вы добавите =null в декларацию, вы можете пройти null, но вы также можете опустить параметр.

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

Моим главным советом было бы не делать аргумент необязательным вообще. По моему опыту это сделает использование таких функций неясным, особенно по мере роста кода и добавления дополнительных аргументов.

Смежные вопросы