Почему в этой условной постановке есть восклицательный знак перед переменной?

Это условное утверждение:

$comments = get_value_of_comments_as_string(); if( !$comments == "on" ){...} 

Какова цель ! перед переменной $comments особенно, поскольку $comments содержит строку.

Изменить: это условное выражение не похоже на опечатку, поскольку исходный кодер имел 5 таких условных операторов. все как это.

! является логическим оператором отрицания (или нет), поэтому в основном он изменяет значения правды на значения false и false для true.

Я уверен, что намерения автора должны были быть

 !($comments == "on") // if comments == "on" return false 

но то, что он на самом деле говорит, это

 (!$comments) == "on") // if not comments == "on" ... this test will only succeed if comments is null or an empty string. 

Гораздо лучший способ выразить это

 $comments != "on" 

Такое поведение происходит потому, что! имеет более высокий приоритет тогда ==, поэтому он будет оценивать перед == .