Что проверяется в этой функции? - PullRequest
2 голосов
/ 01 апреля 2011

Я пытаюсь перенести некоторый код PHP на C #, и я наткнулся на функцию PHP этой формы:

function DoStuff($myVar, array $myArray1, array $myArray2 = array())
{
    // some code not involving $myArray2

    if ($myArray2)
    {
        // do things with $myArray2, but if I arrive here, what
        // condition was met?
    }
} 

Мой лучший выбор (который может быть совершенно неверным) после просмотраколичество соответствующих страниц в php.net относительно того, что происходит:

  • $myArray2 необязательно, но если ничего не предоставлено, массив становится пустым
  • Условные проверки ifчтобы узнать, был ли передан $myArray2 с одним или несколькими элементами

Это правильно?Если нет, то что правильно?Спасибо!

Ответы [ 2 ]

6 голосов
/ 01 апреля 2011

Да, это правильно.Функция также выдаст фатальную ошибку, если для $myArray1 или $myArray2.

передано что-то, не являющееся массивом.
2 голосов
/ 01 апреля 2011

Вы правы, и вот объяснение:

Подсказка типа array говорит, что $myArray2 может принимать только массив.Значение по умолчанию array() говорит о том, что $myArray2 является необязательным, и, если оно не будет передано, будет назначен пустой массив.

Учитывая, что единственное, что $myArray2 может быть во времяусловное if - это массив, вы можете подтвердить, что будет принято, приведением типа к логическому значению.В этом случае массив всегда преобразуется в true, если только он не имеет элементов, в этом случае он является ложным.

В стороне: Следует помнить, что, хотя в настоящее время он запрещен,Передайте NULL в качестве параметра как $myArray1, так и $myArray2, допустимо установить значение по умолчанию $myArray2 как NULL.В этом случае вы также можете передать NULL этому параметру.Кроме того, условный оператор также будет проверять, что для параметра не задано значение NULL.

...