Исходный код
if ( strchr ( $_POST["ship$i"], "+") || strchr($_POST["ship$i"], " ") || strchr($_POST["ship$i"], ",") || strchr($_POST["ship$i"], ".") || strchr($_POST["ship$i"], "-") || strchr($_POST["ship$i"], "_") || strchr($_POST["ship$i"], ";") || strchr($_POST["ship$i"], ":") ) {
message("You got owned by >>The_Revenge Anticheat Systems<<", "Anticheat");
}
if ( !strchr ( $_POST["ship$i"], "+") && !strchr($_POST["ship$i"], " ") && !strchr($_POST["ship$i"], ",") && !strchr($_POST["ship$i"], ".") && !strchr($_POST["ship$i"], "-") && !strchr($_POST["ship$i"], "_") && !strchr($_POST["ship$i"], ";") && !strchr($_POST["ship$i"], ":")) {
// код
}
Исходный код делает проверку входного параметра на наличие целого числа без знака.
Как можно улучшить код
Сначала понимаем, что первый и второй if
— в точности противоположны друг другу и вместо второго стоит написать просто else
.
if ( strchr ( $_POST["ship$i"], "+") || strchr($_POST["ship$i"], " ") || strchr($_POST["ship$i"], ",") || strchr($_POST["ship$i"], ".") || strchr($_POST["ship$i"], "-") || strchr($_POST["ship$i"], "_") || strchr($_POST["ship$i"], ";") || strchr($_POST["ship$i"], ":") ) {
message("You got owned by >>The_Revenge Anticheat Systems<<", "Anticheat");
}
else {
// код
}
Избавились от мусорного кода.
Дальше стоит обратить внимание на изобилие повторов входного параметра, а также смешение знаний: как проверить валидность входного параметра и что делать, если параметр не валидный. Разделяем знания путём вынесения проверки в отдельную функцию.
function isShipValid( $ship ) {
return strchr ( $ship, "+") || strchr($ship, " ") || strchr($ship, ",") || strchr($ship, ".") || strchr($ship, "-") || strchr($ship, "_") || strchr($ship, ";") || strchr($ship, ":");
}
if ( isShipValid( $_POST["ship$i"] ) ) {
message("You got owned by >>The_Revenge Anticheat Systems<<", "Anticheat");
}
else {
// код
}
Теперь валидность параметра «корабль» можно проверять в любом месте проекта.
И наконец, вишенка на торте: а почему, собственно, наличие целого положительного числа проверяется столь замысловатым способом? Да при этом ещё и некорректным?
Самый короткий и надёжный способ проверить, что строка состоит только из цифр — использовать простое регулярное выражение:
function isShipValid( $ship ) {
return preg_match( '/^(\d+)$/', $ship );
}