Код (PHP): public function validate($input) { $valid = filter_var($input, FILTER_VALIDATE_URL); return !!$valid; } PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
Индийский код. Это даже не приведение к булеву типу, это двойное логическое "не", в итоге через кишечник получает булево значение сердца!
Это не из попова случайно? Адская обертка над встроенной функцией, которая: 1) Добавляет оверхед; 2) Коцает результаты функции, которые, будучи вставленные в любое выражение и так будут трактованы как true.
а почему индийский? filter_var возвращает mixed а мне надо что бы не mixed, а bool, вот эта комбинация и приводит результат к bool. хотя конечно логичнее было бы писать за место !! вот это (bool) но это не попов, он бы до такого не додумал, хотя и эксперт в области web-программирования.
Я тоже так хотел сказать, но потом понял, что это не верно. Над результатом функции filter_var вообще никаких операций не проводится. Буль в данной ситуации есть результат логической операции ! =)
дело вкуса Добавлено спустя 1 минуту: п.м.с.м., надо писать код так, чтобы было понятно не только экспертам. !! выглядит как шарада
filter_var() с этими параметрами вернет либо строку с URL, либо false. !! также как и (bool) превратит строку с url в true, а false оставит как false. и что здесь не верно? кстати, тема уже поднималась здесь: viewtopic.php?f=13&t=52659
Можно вообще не трогать. В любом логическом выражении любое значение, отличное от 'false', 0, null и тд будет трактоваться как true. В этом суть того, почему 95% функций возвращают не true/false а "какое-то более полезное значение"/false. Первое и так true.
Помню, у меня были сложности со значением 0. Нужно было пропускать лишь числа и проверять, что это действительно число и что оно действительно установлено. 0 трактовался, как false.
В языках со слабым типизированием, типа PHP, есть специальный оператор "===", он проводит сравнение с учетом типа операндов. 0 == false //true 0 === false // false Добавлено спустя 1 минуту 7 секунд: Еще в PHP есть функции типа is_numeric(). И более конкретные типа is_int();
Весело. И тут же у меня появился ещё вопросик, почему четыре: Код (Text): $a = 1; var_dump( $a + ++$a ); //4 о_О Может, я чего-то не понимаю, но кажется, что должно быть три, да?
Не должно. И не будет. Разберем $a + ++$a: 1) сначала делается преинкремент ++$a, из-за этого $a становится равен 2. 2) Но $a стоит в двух местах в выражении... 3) Правильно! Получилось 2+2. Просто у ++ приоритет в пхп выше, вот и все, хз чего тут прям такого странного и удивительного.
а ну ка проверь так Код (PHP): $a = 1; var_dump($a + $a++); Как только ты поймешь разницу в ++$a и $a++ все тебе станят понятно
Если это мне, то разницу между постинкрементом и преинкрементом я знаю. Да, не уточнил, что это про преинкремент, потому что он выполняется до передачи операндов оператору. А постинкремент выполняется уже как часть выражения, когда первое $a уже записано как операнд, то есть значение уже скопировано.
В пыхе есть два важных правила: 1. === и !== - всегда и везде. Если нужно, приводить типы явно через (int), (string) и т.д. 2. in_array($a, $b, true) ну и нотисы воспринимать как фатальную ошибку. К примеру laravel при включенном дебаге от нотиса падает. И это круто )