Intereting Posts
Конвертировать формат даты yyyy-mm-dd => dd-mm-yyyy API календаря Google v3 – аутентификация с помощью жестко настроенных учетных данных Как я могу реализовать свой запрос на завивки PHP на Python Дата отметки времени PHP для пользовательского часового пояса Как бороться с таймаутами сеанса в запросах AJAX PDO: Как получить доступ к файлу Microsoft Access в Linux? Htaccess: добавить / удалить конечную косую черту из URL Нужно ли мне взломать ZendFramework1.10.8 / Doctrine1.2.2, чтобы получить модель? DECIMAL длина для microtime (true)? Использование SimpleXML для создания объекта XML с нуля Изменение размера / уменьшенное изображение Изображения при загрузке с помощью ImageMagick Функциональность php DateTime createFromFormat Форма Codeigniter с выпадающим списком с добавлением категории name в категорию в таблице блога и таблице категорий с именем catgoryname Разработка базы данных MySql для викторины PHP: перевести POST в простые переменные?

Функция пробоя функции PHP isset ()

У меня проблема с функцией isset PHP. Это часто и таинственно (для меня) пропуски.

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

$a = "72"; if(isset($a["ErrorTable"])) echo "YES"; else echo "NO"; 

Этот плохой мальчик печатает ДА ​​на моем сервере. Я попробовал это на Ideone (онлайн-интерпретатор thingie. Это круто!) Здесь: http://ideone.com/r6QKhK, и он печатает НЕТ.

Я думаю, что это имеет какое-то отношение к используемой нами версии PHP. Может ли кто-то пролить свет на это?

Рассмотрим следующий фрагмент кода:

 $a = "72"; var_dump( isset($a["ErrorTable"]) ); 

Вы проверяете, установлен ли $a["ErrorTable"] . PHP сначала выводит любое нечисловое смещение в int и это делает ErrorTable равным 0 .

По существу, вы просто делаете:

 if ( isset($a[0]) ) 

Строки в PHP могут быть доступны для массива, а $a[0] определенно задано, и условие будет оцениваться как TRUE .

Однако это странное поведение было зафиксировано в PHP 5.4.0, а журнал изменений для isset() говорит:

5.4.0. Проверка нечисловых смещений строк теперь возвращает FALSE.

Вероятно, ваш сервер использует старую версию PHP, и это объясняет, почему она выводит YES .


array_key_exists() этого вы можете использовать array_key_exists() :

 $a = "72"; if ( is_array($a) && array_key_exists('ErrorTable', $a) ) { echo 'YES'; } else { echo 'NO'; } 

Выход будет NO во всех версиях PHP.

Обычно я использую пустую функцию:

 $a = "72"; if(!empty($a["ErrorTable"])) echo "YES"; else echo "NO"; 

$ a [0] – это способ ссылки на 1-й символ в строке, который является значением «7». Поскольку строковые символы просто ссылаются на их числовое значение, «ErrorTable» представляет собой метод для метода int (0)

Это имеет место в PHP 5.2.17 и 5.3.23, но не в 5.4.15 или 5.5.0