ctype_digit()
works on values that consists only of digits.
Where $rating = -25;
is false as it is being treated as a ASCII code in this particular case (explained below), and "-25"
is invalid because -
is not a digit.
You could type juggle but I think you're looking for is_numeric()
echo is_numeric( "-25");
or echo ctype_digit((integer) $var);
However the latter would return true if the string cannot be cast to an integer. It will have the value of 0 if that's the case.
Important:
If you pass a literal integer in range of -128
and 255
to ctype_digit()
the value is converted to the character defined in the ASCII table. If its not a number, false is expected. Any other integer value is normal expected behavior.