Проверка наличия переменной php

Проверка наличия переменной php

Reg.ru: домены и хостинг

Крупнейший регистратор и хостинг-провайдер в России.

Более 2 миллионов доменных имен на обслуживании.

Продвижение, почта для домена, решения для бизнеса.

Более 700 тыс. клиентов по всему миру уже сделали свой выбор.

Бесплатный Курс "Практика HTML5 и CSS3"

Освойте бесплатно пошаговый видеокурс

по основам адаптивной верстки

на HTML5 и CSS3 с полного нуля.

Фреймворк Bootstrap: быстрая адаптивная вёрстка

Пошаговый видеокурс по основам адаптивной верстки в фреймворке Bootstrap.

Научитесь верстать просто, быстро и качественно, используя мощный и практичный инструмент.

Верстайте на заказ и получайте деньги.

Что нужно знать для создания PHP-сайтов?

Ответ здесь. Только самое важное и полезное для начинающего веб-разработчика.

Узнайте, как создавать качественные сайты на PHP всего за 2 часа и 27 минут!

Создайте свой сайт за 3 часа и 30 минут.

После просмотра данного видеокурса у Вас на компьютере будет готовый к использованию сайт, который Вы сделали сами.

Вам останется лишь наполнить его нужной информацией и изменить дизайн (по желанию).

Изучите основы HTML и CSS менее чем за 4 часа.

После просмотра данного видеокурса Вы перестанете с ужасом смотреть на HTML-код и будете понимать, как он работает.

Вы сможете создать свои первые HTML-страницы и придать им нужный вид с помощью CSS.

Бесплатный курс "Сайт на WordPress"

Хотите освоить CMS WordPress?

Получите уроки по дизайну и верстке сайта на WordPress.

Научитесь работать с темами и нарезать макет.

Бесплатный видеокурс по рисованию дизайна сайта, его верстке и установке на CMS WordPress!

Хотите изучить JavaScript, но не знаете, как подступиться?

После прохождения видеокурса Вы освоите базовые моменты работы с JavaScript.

Развеются мифы о сложности работы с этим языком, и Вы будете готовы изучать JavaScript на более серьезном уровне.

*Наведите курсор мыши для приостановки прокрутки.

Проверка значения переменной в PHP

При разработке скриптов и веб-приложений достаточно часто требуется проверить, содержит ли некая переменная числовое значение.

Обычно это важно с точки зрения дальнейших операций, которые потом будут проделаны с этой переменной.

При этом стоит отметить, что нередко переменная может иметь тип "строка", но хранить при этом вполне себе числовое значение.

Решением в этом случае будет использование функции is_numeric(). Она возвращает true, если значение проверяемой переменной является числом или строкой, содержащей число, и false — в противном случае.

Давайте рассмотрим ее работу на следующем примере.

Поскольку разнообразие чисел огромно, мы не может считать, что некое значение является числом просто потому, что оно состоит из символов от 0 до 9.

Что делать с точкой (разделителем дробной части) или знаком "минус"? Их нельзя просто включить в набор проверяемых символов, потому что минус может располагаться только в начале числа, а точка может быть только одна.

А ведь еще есть шестнадцатеричные числа и вариант экспоненциальной (научной) записи чисел.

Все эти варианты прекрасно предусматривает PHP-функция is_numeric().

Важно, что она не только определяет, содержит ли переменная данные, являющиеся числом, но и проверяет, возможно ли эти данные преобразовать в число.

Разумеется, формально число 5 и строка 5 с точки зрения PHP различаются. Однако обычно эти различия для нас совершенно несущественны, поэтому функция is_numeric() все же приносит пользу.

Данная функция умеет распознавать дробные числа (например, 5.1) и возвращать true, однако для чисел с разделителями групп разрядов (например, 5,100) она вернет значение false.

Чтобы убрать разделители групп разрядов из числа перед вызовом is_numeric(), воспользуйтесь функцией str_replace().

Если же вы хотите узнать, относится ли число к конкретному числовому типу, используйте следующие функции с "говорящими" именами: is_float() (или is_double(), или is_real(); это одно и то же) и is_int() (или is_integer(), или is_long()).

В действительности, числовые данные бывают и других форматов: положительные, отрицательные, дробные числа и др., но это уже тема другой заметки, и мы обязательно вернемся к этому моменту.

Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!

(PHP 4, PHP 5, PHP 7)

isset — Определяет, была ли установлена переменная значением, отличным от NULL

Описание

Определяет, была ли установлена переменная значением отличным от NULL

Если переменная была удалена с помощью unset() , то она больше не считается установленной.

isset() вернет FALSE при проверке переменной которая была установлена значением NULL . Также учтите, что NULL-символ ("") не равен константе NULL в PHP.

Если были переданы несколько параметров, то isset() вернет TRUE только в том случае, если все параметры определены. Проверка происходит слева направо и заканчивается, как только будет встречена неопределенная переменная.

Список параметров

Возвращаемые значения

Возвращает TRUE , если var определена и ее значение отлично от NULL , и FALSE в противном случае.

Список изменений

Версия Описание
5.4.0

Проверка нечислового индекса строки теперь возвращает FALSE .

Примеры

Пример #1 Пример использования isset()

// Проверка вернет TRUE, поэтому текст будет напечатан.
if (isset( $var )) <
echo "Эта переменная определена, поэтому меня и напечатали." ;
>

// В следующем примере мы используем var_dump для вывода
// значения, возвращаемого isset().

$a = "test" ;
$b = "anothertest" ;

var_dump (isset( $a )); // TRUE
var_dump (isset( $a , $b )); // TRUE

var_dump (isset( $a )); // FALSE
var_dump (isset( $a , $b )); // FALSE

$foo = NULL ;
var_dump (isset( $foo )); // FALSE

Функция также работает с элементами массивов:

Читайте также:  Перечень операторов связи рф

= array ( ‘test’ => 1 , ‘hello’ => NULL , ‘pie’ => array( ‘a’ => ‘apple’ ));

var_dump (isset( $a [ ‘test’ ])); // TRUE
var_dump (isset( $a [ ‘foo’ ])); // FALSE
var_dump (isset( $a [ ‘hello’ ])); // FALSE

// Элемент с ключом ‘hello’ равен NULL, поэтому он считается неопределенным
// Если вы хотите проверить существование ключей со значением NULL, попробуйте так:
var_dump ( array_key_exists ( ‘hello’ , $a )); // TRUE

// Проверка вложенных элементов массива
var_dump (isset( $a [ ‘pie’ ][ ‘a’ ])); // TRUE
var_dump (isset( $a [ ‘pie’ ][ ‘b’ ])); // FALSE
var_dump (isset( $a [ ‘cake’ ][ ‘a’ ][ ‘b’ ])); // FALSE

Пример #2 isset() и строковые индексы

В PHP 5.4 был изменен способ обработки строковых индексов в isset() .

Результат выполнения данного примера в PHP 5.3:

Результат выполнения данного примера в PHP 5.4:

Примечания

isset() работает только с переменными, поэтому передача в качестве параметров любых других значений приведет к ошибке парсинга. Для проверки определения констант используйте функцию defined() .

Замечание: Поскольку это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций.

При использовании isset() на недоступных свойствах объекта, будет вызываться перегруженный метод __isset(), если он существует.

Смотрите также

  • empty() — Проверяет, пуста ли переменная
  • __isset()
  • unset() — Удаляет переменную
  • defined() — Проверяет существование указанной именованной константы
  • Таблица сравнения типов
  • array_key_exists() — Проверяет, присутствует ли в массиве указанный ключ или индекс
  • is_null() — Проверяет, является ли значение переменной равным NULL
  • Оператор управления ошибками @

User Contributed Notes 30 notes

I, too, was dismayed to find that isset($foo) returns false if ($foo == null). Here’s an (awkward) way around it.

unset($foo);
if (compact(‘foo’) != array()) <
do_your_thing();
>

Of course, that is very non-intuitive, long, hard-to-understand, and kludgy. Better to design your code so you don’t depend on the difference between an unset variable and a variable with the value null. But "better" only because PHP has made this weird development choice.

In my thinking this was a mistake in the development of PHP. The name ("isset") should describe the function and not have the desciption be "is set AND is not null". If it was done properly a programmer could very easily do (isset($var) || is_null($var)) if they wanted to check for this!

A variable set to null is a different state than a variable not set — there should be some easy way to differentiate. Just my (pointless) $0.02.

"empty() is the opposite of (boolean) var, except that no warning is generated when the variable is not set."

So essentially
if (isset( $var ) && $var )
?>
is the same as
if (!empty( $var ))
?>
doesn’t it? 🙂

!empty() mimics the chk() function posted before.

You can safely use isset to check properties and subproperties of objects directly. So instead of writing

isset($abc) && isset($abc->def) && isset($abc->def->ghi)

or in a shorter form

isset($abc, $abc->def, $abc->def->ghi)

you can just write

without raising any errors, warnings or notices.

Examples
= (object) array( "def" => 123 );
var_dump (isset( $abc )); // bool(true)
var_dump (isset( $abc -> def )); // bool(true)
var_dump (isset( $abc -> def -> ghi )); // bool(false)
var_dump (isset( $abc -> def -> ghi -> jkl )); // bool(false)
var_dump (isset( $def )); // bool(false)
var_dump (isset( $def -> ghi )); // bool(false)
var_dump (isset( $def -> ghi -> jkl )); // bool(false)

var_dump ( $abc ); // object(stdClass)#1 (1) < ["def"] =>int(123) >
var_dump ( $abc -> def ); // int(123)
var_dump ( $abc -> def -> ghi ); // null / E_NOTICE: Trying to get property of non-object
var_dump ( $abc -> def -> ghi -> jkl ); // null / E_NOTICE: Trying to get property of non-object
var_dump ( $def ); // null / E_NOTICE: Trying to get property of non-object
var_dump ( $def -> ghi ); // null / E_NOTICE: Trying to get property of non-object
var_dump ( $def -> ghi -> jkl ); // null / E_NOTICE: Trying to get property of non-object
?>

How to test for a variable actually existing, including being set to null. This will prevent errors when passing to functions.

// false
var_export (
array_key_exists ( ‘myvar’ , get_defined_vars ())
);

$myvar ;
// false
var_export (
array_key_exists ( ‘myvar’ , get_defined_vars ())
);

$myvar = null ;
// true
var_export (
array_key_exists ( ‘myvar’ , get_defined_vars ())
);

unset( $myvar );
// false
var_export (
array_key_exists ( ‘myvar’ , get_defined_vars ())
);

if ( array_key_exists ( ‘myvar’ , get_defined_vars ())) <
myfunction ( $myvar );
>
?>

Note: you can’t turn this into a function (e.g. is_defined($myvar)) because get_defined_vars() only gets the variables in the current scope and entering a function changes the scope.

in PHP5, if you have

class Foo
<
protected $data = array( ‘bar’ => null );

function __get ( $p )
<
if( isset( $this -> data [ $p ]) ) return $this -> data [ $p ];
>
>
?>

and
= new Foo ;
echo isset( $foo -> bar );
?>
will always echo ‘false’. because the isset() accepts VARIABLES as it parameters, but in this case, $foo->bar is NOT a VARIABLE. it is a VALUE returned from the __get() method of the class Foo. thus the isset($foo->bar) expreesion will always equal ‘false’.

Читайте также:  Дискета восстановления пароля windows 7

The new (as of PHP7) ‘null coalesce operator’ allows shorthand isset. You can use it like so:

// Fetches the value of $_GET[‘user’] and returns ‘nobody’
// if it does not exist.
$username = $_GET [ ‘user’ ] ?? ‘nobody’ ;
// This is equivalent to:
$username = isset( $_GET [ ‘user’ ]) ? $_GET [ ‘user’ ] : ‘nobody’ ;

// Coalescing can be chained: this will return the first
// defined value out of $_GET[‘user’], $_POST[‘user’], and
// ‘nobody’.
$username = $_GET [ ‘user’ ] ?? $_POST [ ‘user’ ] ?? ‘nobody’ ;
?>

Quoted from http://php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op

I tried the example posted previously by Slawek:

$foo = ‘a little string’;
echo isset($foo)?’yes ‘:’no ‘, isset($foo[‘aaaa’])?’yes ‘:’no ‘;

He got yes yes, but he didn’t say what version of PHP he was using.

I tried this on PHP 5.0.5 and got: yes no

But on PHP 4.3.5 I got: yes yes

Apparently, PHP4 converts the the string ‘aaaa’ to zero and then returns the string character at that position within the string $foo, when $foo is not an array. That means you can’t assume you are dealing with an array, even if you used an expression such as isset($foo[‘aaaa’][‘bbb’][‘cc’][‘d’]), because it will return true also if any part is a string.

PHP5 does not do this. If $foo is a string, the index must actually be numeric (e.g. $foo[0]) for it to return the indexed character.

Careful with this function "ifsetfor" by soapergem, passing by reference means that if, like the example $_GET[‘id’], the argument is an array index, it will be created in the original array (with a null value), thus causing posible trouble with the following code. At least in PHP 5.

= array();
print_r ( $a );
ifsetor ( $a [ "unsetindex" ], ‘default’ );
print_r ( $a );
?>

will print

Any foreach or similar will be different before and after the call.

1) Note that isset($var) doesn’t distinguish the two cases when $var is undefined, or is null. Evidence is in the following code.

unset( $undefined );
$null = null ;
if ( true === isset( $undefined )) else if ( true === isset( $null )) else ?>

2) If you want to distinguish undefined variable with a defined variable with a null value, then use array_key_exist

unset( $undefined );
$null = null ;

if ( true !== array_key_exists ( ‘undefined’ , get_defined_vars ())) else // ‘$undefined does not exist’
if ( true === array_key_exists ( ‘null’ , get_defined_vars ()))
else // ‘$null exists’
?>

To organize some of the frequently used functions..

/**
* Returns field of variable (arr[key] or obj->prop), otherwise the third parameter
* @param array/object $arr_or_obj
* @param string $key_or_prop
* @param mixed $else
*/
function nz ( $arr_or_obj , $key_or_prop , $else ) <
$result = $else ;
if(isset( $arr_or_obj )) <
if( is_array ( $arr_or_obj ) <
if(isset( $arr_or_obj [ $key_or_prop ]))
$result = $arr_or_obj [ $key_or_prop ];
>elseif( is_object ( $arr_or_object ))
if(isset( $arr_or_obj -> $key_or_prop ))
$result = $arr_or_obj -> $key_or_prop ;
>
>
return $result ;
>

/**
* Returns integer value using nz()
*/
function nz_int ( $arr_or_obj , $key_or_prop , $else ) <
return intval ( nz ( $arr_or_obj , $key_or_prop , $else ));
>

$my_id = nz_int ( $_REQUEST , ‘id’ , 0 );
if( $my_id > 0 ) <
//why?
>
?>

If you regard isset() as indicating whether the given variable has a value or not, and recall that NULL is intended to indicate that a value is _absent_ (as said, somewhat awkwardly, on its manual page), then its behaviour is not at all inconsistent or confusing.

It’s not just to check for uninitialised variables — a lot of the time those are just due to sloppy coding. There are other ways a variable could fail to have a value (e.g., it’s meant to hold the value returned from a function call but the function didn’t have a value to return) where uninitialising the variable would not be an option nor even make sense (e.g., depending on what was to be done with the returned value).

Note that isset() is not recursive as of the 5.4.8 I have available here to test with: if you use it on a multidimensional array or an object it will not check isset() on each dimension as it goes.

Imagine you have a class with a normal __isset and a __get that fatals for non-existant properties. isset($object->nosuch) will behave normally but isset($object->nosuch->foo) will crash. Rather harsh IMO but still possible.

// pretend that the methods have implementations that actually try to do work
// in this example I only care about the worst case conditions

public function __get ( $name ) <
echo "(getting < $name >) " ;

// if property does not exist <
echo "Property does not exist!" ;
exit;
// >
>

public function __isset ( $name ) <
echo "(isset < $name >?) " ;
// return whether the property exists
return false ;
>

$obj = new FatalOnGet ();

// works
echo "Testing if ->nosuch exists: " ;
if (isset( $obj -> nosuch )) echo "Yes" ; else echo "No" ;

// fatals
echo "
Testing if ->nosuch->foo exists: " ;
if (isset( $obj -> nosuch -> foo )) echo "Yes" ; else echo "No" ;

Читайте также:  Ремонт индукционных варочных панелей electrolux

// not executed
echo "
Testing if ->irrelevant exists: " ;
if (isset( $obj -> irrelevant )) echo "Yes" ; else echo "No" ;

?>

Testing if ->nosuch exists: No
Testing if ->nosuch->foo exists: Property does not exist!

Uncomment the echos in the methods and you’ll see exactly what happened:

Testing if ->nosuch exists: (isset nosuch?) No
Testing if ->nosuch->foo exists: (getting nosuch) Property does not exist!

On a similar note, if __get always returns but instead issues warnings or notices then those will surface.

Return Values :
Returns TRUE if var exists and has value other than NULL, FALSE otherwise.

= NULL ;
$b = FALSE ; //The out put was TRUE.
$c = TRUE ;
$d = » ;
$e = "" ;
if(isset( $b )):
echo "TRUE" ;
else:
echo "FALSE" ;
endif;
?>
Could any one explain me in clarity.

Sometimes you have to check if an array has some keys. To achieve it you can use "isset" like this: isset($array[‘key1’], $array[‘key2’], $array[‘key3’], $array[‘key4’])
You have to write $array all times and it is reiterative if you use same array each time.

With this simple function you can check if an array has some keys:

function isset_array () <
if ( func_num_args () 2 ) return true ;
$args = func_get_args ();
$array = array_shift ( $args );
if (! is_array ( $array )) return false ;
foreach ( $args as $n ) if (!isset( $array [ $n ])) return false ;
return true ;
>
?>

Use: isset_array($array, ‘key1’, ‘key2’, ‘key3’, ‘key4’)
First parameter has the array; following parameters has the keys you want to check.

isset expects the variable sign first, so you can’t add parentheses or anything.

The following is an example of how to test if a variable is set, whether or not it is NULL. It makes use of the fact that an unset variable will throw an E_NOTICE error, but one initialized as NULL will not.

function var_exists ( $var ) <
if (empty( $GLOBALS [ ‘var_exists_err’ ])) <
return true ;
> else <
unset( $GLOBALS [ ‘var_exists_err’ ]);
return false ;
>
>

function var_existsHandler ( $errno , $errstr , $errfile , $errline ) <
$GLOBALS [ ‘var_exists_err’ ] = true ;
>

$l = NULL ;
set_error_handler ( "var_existsHandler" , E_NOTICE );
echo ( var_exists ( $l )) ? "True " : "False " ;
echo ( var_exists ( $k )) ? "True " : "False " ;
restore_error_handler ();

The problem is, the set_error_handler and restore_error_handler calls can not be inside the function, which means you need 2 extra lines of code every time you are testing. And if you have any E_NOTICE errors caused by other code between the set_error_handler and restore_error_handler they will not be dealt with properly. One solution:

function var_exists ( $var ) <
if (empty( $GLOBALS [ ‘var_exists_err’ ])) <
return true ;
> else <
unset( $GLOBALS [ ‘var_exists_err’ ]);
return false ;
>
>

function var_existsHandler ( $errno , $errstr , $errfile , $errline ) <
$filearr = file ( $errfile );
if ( strpos ( $filearr [ $errline — 1 ], ‘var_exists’ ) !== false ) <
$GLOBALS [ ‘var_exists_err’ ] = true ;
return true ;
> else <
return false ;
>
>

$l = NULL ;
set_error_handler ( "var_existsHandler" , E_NOTICE );
echo ( var_exists ( $l )) ? "True " : "False " ;
echo ( var_exists ( $k )) ? "True " : "False " ;
is_null ( $j );
restore_error_handler ();

?>

Outputs:
True False
Notice: Undefined variable: j in filename.php on line 26

This will make the handler only handle var_exists, but it adds a lot of overhead. Everytime an E_NOTICE error happens, the file it originated from will be loaded into an array.

Now this is how to achieve the same effect (ie, having isset() returning true even if variable has been set to null) for objects and arrays

$array =array( ‘foo’ => null );

return isset( $array [ ‘foo’ ]) || array_key_exists ( ‘foo’ , $array )
? true : false ; // return true

return isset( $array [ ‘inexistent’ ]) || array_key_exists ( ‘inexistent’ , $array )
? true : false ; // return false

return isset( bar :: $foo ) || array_key_exists ( ‘foo’ , get_class_vars ( ‘bar’ ))
? true : false ; // return true

return isset( bar :: $inexistent ) || array_key_exists ( ‘inexistent’ , get_class_vars ( ‘bar’ ))
? true : false ; // return false

class bar
<
public $foo = null ;
>

return isset( $bar -> foo ) || array_key_exists ( ‘foo’ , get_object_vars ( $bar ))
? true : false ; // return true

return isset( $bar -> inexistent ) || array_key_exists ( ‘inexistent’ , get_object_vars ( $bar ))
? true : false ; // return true

$bar =new stdClass ;
$bar -> foo = null ;

return isset( $bar -> foo ) || array_key_exists ( ‘foo’ , get_object_vars ( $bar ))
? true : false ; // return true

return isset( $bar -> inexistent ) || array_key_exists ( ‘inexistent’ , get_object_vars ( $bar ))
? true : false ; // return true

При написании своих модулей, используя PHP как основу, иногда имеет смысл проверить, существует ли та или иная переменная. Ведь если этим пренебречь – можно получить массу ошибок в дальнейшей работе скрипта.

Предположим, что вы пишете скрипт отправки писем с вашего сайта и вам нужно проверить, заполнил ли отправитель свое имя. Имя передается в переменную «$name» – ее нам и нужно проверить. Выглядеть это будет следующим образом:

Чисто отрицание, то есть проверку на то, что поле не заполнено, можно сделать, добавив знак восклицания:

Это очень нужная вещь, помогающая избежать многих ошибок.

Ссылка на основную публикацию
Приложение следить за человеком по номеру телефона
Отслеживание по номеру телефона - это приложение для Android, благодаря которому вы всегда будете знать где находятся ваши родные и...
Почему телефон ночью быстро разряжается
Если телефон стал быстро разряжаться, это еще не значит, что виновата батарея. В 70% случаев пользователь сам настроил устройство таким...
Почему телефон самостоятельно перезагружается
Постоянная и не запланированная перезагрузка смартфона на Android – раздражающая ошибка. Она порождает плохое настроение и желание расстаться с гаджетом....
Приложение чтобы играть андроид игры на компьютер
Самый мощный эмулятор Android из всех Newest ReleaseВерсия 7.1.3 2020.03.04 Играйте бесплатно в любые игры для Android. Наслаждайтесь оптимизированной графикой...
Adblock detector