В этом топике я приведу примеры и разъяснения по правильному использованию «!», «isset» и «empty» в PHP.
Так уж сложилось, что PHP — язык с отсутствием строгой типизации, в результате чего можно использовать функции и операторы не совсем по назначению и они всё равно будут давать какой-то результат. Разберём что из себя представляют такие вещи как «!», «isset» и «empty».
1. Про «!». Знаку «!» можно дать вольный перевод на русский язык как «не». То есть «!правда» будет «неправда», то есть «ложь», а «!ложь» будет «не ложь», то есть «правда». Данный оператор можно применять только к существующим переменным. Приведу несколько примеров:
var_dump(!true); var_dump(!false);
Выведут нам
bool(false)
bool(true)
Всё логично. «!true» значит «неправда», то есть «false». Ну и «!false» значит «не ложь», то есть правда. Следующий пример:
$var=true; var_dump($var); var_dump(!$var);
результат будет таким:
bool(true)
bool(false)
Ну, в общем, тоже всё понятно. Выставляем значение переменной «var» в «true». Ну и, соответственно, «не var» будет «false». Как выяснилось, при помощи «!» некоторые люди проверяют существование переменной и вообще Бог знает что. Это неправильно, так делать нельзя, хотя, раз уж PHP такой PHP, то резутьтат от операции «!» над несуществующей переменной тоже будет, но мы увидим ноутис (если они включены, а при разработке их надо включать обязательно). Итак такой код:
var_dump($var); var_dump(!$var);
выдаст нам примерно такой результат:
Notice: Undefined variable: var in /webs/test.local/www/test.php on line 2 NULL
Notice: Undefined variable: var in /webs/test.local/www/test.php on line 4 bool(true)
Как видим, результат всё же есть и применением «!» к переменной, в принципе можно проверить её существование, но если переменная будет существовать и иметь значение «false», то результат будет тот же. Ну и, плюс ко всему, имеем ненужные ноутисы. И еще вот такой код
$var=array(); var_dump(!$var);
тоже выдаст «true», то есть, в принципе, можно проверить массив на заполненность. И еще «true» будет в последнем примере, если «var» будет иметь значения «array()», «0», «'0'», «''». Вывод: оператор «!» можно применять только к существующим переменным, чтобы сделать их «отрицание», применять их правильно к тем и только к тем переменным, которые могут быть «true» или «false», т.е. логического типа данных «bool». Остальные случаи, кончено, тоже работают, но, если, дай Бог, всё-таки введут в PHP строгую типизацию, то всё полетит к чертям.
2. Про isset.isset — это такая функция. Она проверяет переменную на существование и не «NULL». То есть «isset($var);» вернёт true только в случае, если переменная объявлена и имеет значение отличное от NULL. Вот такой код:
В первом случае переменной еще не существует, поэтому «false», во втором мы переменной присвоили целочисленное значение «123», то есть переменная появилась и имеет значение, отличное от «NULL», поэтому «true», в третьем мы присвоили этой переменной значение «NULL», поэтому снова «false». Честно, говоря, я ни разу не использовал в PHP значение NULL и при помощи isset проверяю существование переменной. Вывод: isset проверяет существование переменной и возвращает «true», если эта переменная существует и её значение отличное от «NULL». Глобальные переменные типа $_POST существуют всегда, поэтому isset($_POST) всегда выдаст true.
3. Про empty. Вот тут столько же «непонятностей», что и с «!», как раз из-за отсутствия строгой типизации и, как следствие возможности сравнить, например строку с целым числом. «empty($var);» вернёт «true», если $var=0, $var='', $var='0', $var=NULL, $var=false, $var=array(), то есть пустой массив, или переменной вообще не существует. При попытке «скормить» функции несуществующую переменную, ноутиса не будет. Для чего я употребляю «empty»: в первую очередь для проверки «пришло ли что-нибудь из формы», т.е.
if (!empty($_POST))
во вторых, для проверки массивов на заполненность. Ну и еще, например, удобно её использовать для одновременной проверки существования и непустости переменной: например, имеем урл и нам надо проверить что в нём содержится — допустим три варианта «/catalog», «/catalog/», «/catalog/10». Первые два варианта надо сделать равнозначными, а воторой уже выведет нам конкретную запись в каталоге. Делаем что-то типа
$url=explode('/', $_SERVER['REQUEST_URI']); if (empty($url[2])) ... else ...
Эта запись будет равнозначна следующей:
if (!isset($url[2]) || (isset($url[2]) && $url[2]!=''))
Однако, следует иметь ввиду, что если на втором месте в урле будет стоять ноль, то этот empty выдаст true. Пример высосан из пальца, но общую суть, я думаю, он показывает.
Вот такие дела. Если что-то непонятно — задавайте вопросы. Если что-то забыл или написал неверно — поправляйте.
You can post now and register later.
If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.
Здравствуйте, подскажите какой тег использовать для увеличения значения, пример на картинке.
Вроде, про такой тег я слышала. Если есть тег прогресс бар, значит и такое должно быть.
Question
Veseloff
В этом топике я приведу примеры и разъяснения по правильному использованию «!», «isset» и «empty» в PHP.
Так уж сложилось, что PHP — язык с отсутствием строгой типизации, в результате чего можно использовать функции и операторы не совсем по назначению и они всё равно будут давать какой-то результат. Разберём что из себя представляют такие вещи как «!», «isset» и «empty».
1. Про «!». Знаку «!» можно дать вольный перевод на русский язык как «не». То есть «!правда» будет «неправда», то есть «ложь», а «!ложь» будет «не ложь», то есть «правда». Данный оператор можно применять только к существующим переменным. Приведу несколько примеров:
Выведут нам
Всё логично. «!true» значит «неправда», то есть «false». Ну и «!false» значит «не ложь», то есть правда. Следующий пример:
результат будет таким:
Ну, в общем, тоже всё понятно. Выставляем значение переменной «var» в «true». Ну и, соответственно, «не var» будет «false». Как выяснилось, при помощи «!» некоторые люди проверяют существование переменной и вообще Бог знает что. Это неправильно, так делать нельзя, хотя, раз уж PHP такой PHP, то резутьтат от операции «!» над несуществующей переменной тоже будет, но мы увидим ноутис (если они включены, а при разработке их надо включать обязательно). Итак такой код:
выдаст нам примерно такой результат:
Как видим, результат всё же есть и применением «!» к переменной, в принципе можно проверить её существование, но если переменная будет существовать и иметь значение «false», то результат будет тот же. Ну и, плюс ко всему, имеем ненужные ноутисы. И еще вот такой код
тоже выдаст «true», то есть, в принципе, можно проверить массив на заполненность. И еще «true» будет в последнем примере, если «var» будет иметь значения «array()», «0», «'0'», «''». Вывод: оператор «!» можно применять только к существующим переменным, чтобы сделать их «отрицание», применять их правильно к тем и только к тем переменным, которые могут быть «true» или «false», т.е. логического типа данных «bool». Остальные случаи, кончено, тоже работают, но, если, дай Бог, всё-таки введут в PHP строгую типизацию, то всё полетит к чертям.
2. Про isset. isset — это такая функция. Она проверяет переменную на существование и не «NULL». То есть «isset($var);» вернёт true только в случае, если переменная объявлена и имеет значение отличное от NULL. Вот такой код:
выдаст нам такой результат:
В первом случае переменной еще не существует, поэтому «false», во втором мы переменной присвоили целочисленное значение «123», то есть переменная появилась и имеет значение, отличное от «NULL», поэтому «true», в третьем мы присвоили этой переменной значение «NULL», поэтому снова «false». Честно, говоря, я ни разу не использовал в PHP значение NULL и при помощи isset проверяю существование переменной. Вывод: isset проверяет существование переменной и возвращает «true», если эта переменная существует и её значение отличное от «NULL». Глобальные переменные типа $_POST существуют всегда, поэтому isset($_POST) всегда выдаст true.
3. Про empty. Вот тут столько же «непонятностей», что и с «!», как раз из-за отсутствия строгой типизации и, как следствие возможности сравнить, например строку с целым числом. «empty($var);» вернёт «true», если $var=0, $var='', $var='0', $var=NULL, $var=false, $var=array(), то есть пустой массив, или переменной вообще не существует. При попытке «скормить» функции несуществующую переменную, ноутиса не будет. Для чего я употребляю «empty»: в первую очередь для проверки «пришло ли что-нибудь из формы», т.е.
во вторых, для проверки массивов на заполненность. Ну и еще, например, удобно её использовать для одновременной проверки существования и непустости переменной: например, имеем урл и нам надо проверить что в нём содержится — допустим три варианта «/catalog», «/catalog/», «/catalog/10». Первые два варианта надо сделать равнозначными, а воторой уже выведет нам конкретную запись в каталоге. Делаем что-то типа
Эта запись будет равнозначна следующей:
Однако, следует иметь ввиду, что если на втором месте в урле будет стоять ноль, то этот empty выдаст true. Пример высосан из пальца, но общую суть, я думаю, он показывает.
Вот такие дела. Если что-то непонятно — задавайте вопросы. Если что-то забыл или написал неверно — поправляйте.
Link to comment
Share on other sites
8 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.