Является ли этот способ валидации ISSET правильной практикой PHP? - PullRequest
0 голосов
/ 21 февраля 2012

Вместо:

<?php echo isset($an_array['array_key']) ? $an_array['array_key'] : ''; ?>

Я обнаружил, что могу использовать только:

<?php echo $an_array['array_key'] ?: ''; ?>

Это исключает (isset), поэтому мне интересно, если это хороший способ кодированияили плохой способ кодирования?

(я только учу PHP)

Ответы [ 4 ]

3 голосов
/ 21 февраля 2012

Второй приведет к уведомлению о неопределенной переменной или неопределенном индексе.Поэтому единственный правильный способ сделать это - первый.

Если у вас отключены уведомления - тогда ваш второй код абсолютно такой же как:

<?php echo $an_array['array_key']; ?>

Кстати, пока вы используете Kohana3, вы можете использовать:

<?php echo Arr::get($an_array, 'array_key', 'default value'); ?>

Но только в том случае, если вы уверены, что переменная $an_array определена

2 голосов
/ 21 февраля 2012

Я против использования оператора ?:, потому что он является источником ошибок "упс".Все, что оценивается как ложное, не будет напечатано.Проверьте это:

$an_array['array_key'] = 0;
echo $an_array['array_key'] ?: '!!!';

$an_array['array_key'] = '0';
echo $an_array['array_key'] ?: '!!!';

$an_array['array_key'] = false;
echo $an_array['array_key'] ?: '!!!';

// ok, this is not the best example, but literally anything
// that evaluates to false can cause a problem:
$an_array['array_key'] = array(); 
echo $an_array['array_key'] ?: '!!!';

Во всех приведенных выше примерах isset вернул бы true.

1 голос
/ 21 февраля 2012

В конечном итоге это будет зависеть от того, что вы пытаетесь сделать, но если бы $an_array['array_key'] было равно нулю, 2-й метод отобразил бы пустую строку

Если вы хотите проверить, существует ли ключ, даже если он нулевой. Используйте array_key_exists

Если вы хотите проверить, не является ли переменная нулевой. Используйте isset

Если ничего не используется, как во втором приведенном вами примере, оно будет преобразовано в логическое значение: см. http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

1 голос
/ 21 февраля 2012

Во втором примере может генерироваться неопределенная переменная уведомление , если $an_array['array_key'] никогда не было установлено

...