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

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

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

if(!strncasecmp(trim(fgets(STDIN)),'y',1)) 

person Leahcim    schedule 03.06.2011    source источник
comment
Это в контексте приложения командной строки?   -  person Pekka    schedule 03.06.2011
comment
да, скрипт создает инструмент оболочки   -  person Leahcim    schedule 03.06.2011


Ответы (2)


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

trim — удаляет все пробелы вокруг пользовательского ввода. Поэтому, если пользователь вводит ' y' или 'y ', он будет преобразован в 'y'.

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

Вы можете переписать это как:

if(strncasecmp(trim(fgets(STDIN)),'y',1) == 0) 
person codaddict    schedule 03.06.2011

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

person csl    schedule 03.06.2011
comment
Да. Многие функции сравнения строк в различных языках/библиотеках возвращают результат таким образом для целей сортировки: отрицательное значение, если строка меньше строки сравнения, положительное значение, если оно больше строки сравнения, ноль, если оно равно. - person Matt Gibson; 03.06.2011