Пожалуйста, объясните этот синтаксис PHP


Я просмотрел функции в руководстве, но я все еще не понимаю этого. По словам человека, написавшего код, если пользователь введет "y", то функция (не показанная здесь) будет выполнена. Однако из-за ! мне кажется, что функция (не показанная здесь) будет выполняться, если пользователь введет что-то другое, кроме "y".

Пожалуйста, объясните (я относительный новичок, поэтому было бы полезно как можно больше подробностей). Спасибо

if(!strncasecmp(trim(fgets(STDIN)),'y',1)) 
Author: codaddict, 2011-06-03

2 answers

fgets(STDIN) - считывает строку со стандартного ввода (в вашем случае с клавиатуры).

trim - удаляет все пробелы, окружающие пользовательский ввод. Поэтому, если пользователь введет ' y' или 'y ', он будет преобразован в 'y'

strncasecmp - Пользователь может ввести либо верхний регистр Y, либо нижний регистр y, эта функция помогает сравнивать без учета регистра. Также эта функция возвращает 0, если сравнение прошло успешно, а затем вы используете оператор ! (не), который изменяет 0 на 1 так, чтобы if тест прошел.

Вы могли бы переписать его следующим образом:

if(strncasecmp(trim(fgets(STDIN)),'y',1) == 0) 
 10
Author: codaddict, 2011-06-03 09:11:20

Функция strncasecmp возвращает 0, если между сравниваемыми строками нет разницы, следовательно, ! необходимо проверить, равны ли они.

 4
Author: csl, 2011-06-03 09:05:38