Что такое isset в php

от admin

Команда isset в PHP

Давайте напишем условие, выполняющее проверку на то, что переменная не равна null :

Более удобно такую проверку можно выполнить с помощью специальной команды isset :

Подавление ворнинга

Пусть переменная $test вообще не определена. Как вы уже знаете, значение такой переменной будет равно null . При этом попытка обратиться к этой переменной приведет к появлению ворнинга:

Ворнинг также будет показан при попытке проверить переменную на null :

А вот проверка через команду isset не приведет к появлению ворнинга — он будет автоматически подавлен:

Инвертирование высказывания

Можно выполнить обратную проверку, на то, что переменная не определена. Для этого выполним инвертирование isset с помощью логического НЕ :

PHP isset() Function

Check whether a variable is empty. Also check whether the variable is set/declared:

<?php
$a = 0;
// True because $a is set
if (isset($a)) <
echo "Variable ‘a’ is set.<br>";
>

$b = null;
// False because $b is NULL
if (isset($b)) <
echo "Variable ‘b’ is set.";
>
?>

Definition and Usage

The isset() function checks whether a variable is set, which means that it has to be declared and is not NULL.

This function returns true if the variable exists and is not NULL, otherwise it returns false.

Note: If multiple variables are supplied, then this function will return true only if all of the variables are set.

isset

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

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

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

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

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

Возвращает true , если var определена и её значение отлично от null , и 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

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

$a = 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() и строковые индексы

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

Примечания

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

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

Замечание:

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

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

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

User Contributed Notes 18 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.

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

<?php
// 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

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

or in a shorter form

you can just write

without raising any errors, warnings or notices.

Examples
<?php
$abc = (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
?>

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

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

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

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

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

and
<?PHP
$foo = 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’.

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

<?php
$a = 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.

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.

<?php
$a = 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.

<?php
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’
?>

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:

<?php
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.

Читать:
Система неравенств с тремя переменными как решать

Here is an example with multiple parameters supplied

<?php
$var = array();
$var [ ‘val1’ ] = ‘test’ ;
$var [ ‘val2’ ] = ‘on’ ;

if ( isset( $var [ ‘val1’ ], $var [ ‘val2’ ] ) && $var [ ‘val2’ ] === ‘on’ ) <
unset( $var [ ‘val1’ ] );
>
print_r ( $var );
?>

This will output:
Array
(
[val2] => on
)

The following code does the same calling «isset» 2 times:

<?php
$var = array();
$var [ ‘val1’ ] = ‘test’ ;
$var [ ‘val2’ ] = ‘on’ ;

if ( isset( $var [ ‘val1’ ] ) && isset( $var [ ‘val2’ ] ) && $var [ ‘val2’ ] === ‘on’ ) <
unset( $var [ ‘val1’ ] );
>
print_r ( $var );
?>

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

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.

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: Because this is a language construct and not a function, it cannot be called using variable functions.

So why it is under «Variable handling Functions». Maybe there should be some good documentation field for language constructs.

Note: isset() only checks variables as anything else will result in a parse error. In other words, the following will not work: isset(trim($name)).

isset() is the opposite of is_null($var) , except that no warning is generated when the variable is not set.

Note that array keys are case sensitive.

var_dump (isset( $ar [ ‘w’ ]),
isset( $ar [ ‘W’ ]));
?>

will report:
bool(true) bool(false)

The unexpected results of isset has been really frustrating to me. Hence, it doesn’t work how you’d think it would, (as documented) a var currently in the scope with a null value will return false.

Heres a quick solution, perhaps there are better ways of going about this, but heres my solution.

<?php
function is_set ( $varname , $parent = null ) <
if ( ! is_array ( $parent ) && ! is_object ( $parent ) ) <
$parent = $GLOBALS ;
>
return array_key_exists ( $varname , $parent );
>
?>

Hence, $varname should be a mixed value of var’s to check for, and $parent can be an array or object, which will default to the GLOBAL scope. See the documentation of array_key_exists for further information.

This will allow to check if a var is in the current scope, object, or array. Whether it’s a null, false, true, or any value. It depends on ARRAY_KEY_EXISTS for it’s functionality which also works with Objects. Feel free to improve on this anyone ;D

In response to 10-Feb-2006 06:02, isset($v) is in all (except possibly buggy) cases equivalent to !is_null($v). And no, it doesn’t actually test if a variable is set or not by my definition «$v is set if unset($v) has no effect».

<?php
unset( $c ); //force $c to be unset
var_dump ( $a =& $c ); // NULL, but this actually sets $a and $c to the ‘same’ NULL.
var_dump (isset( $c )); // bool(false)
var_dump ( $a = 5 ); // int(5)
var_dump ( $c ); // int(5)

unset( $c );
var_dump ( $a =& $c ); // NULL
var_dump (isset( $c )); // bool(false)
unset( $c );
var_dump ( $a = 5 ); // int(5)
var_dump ( $c ); // NULL
?>

In the following example, we see an alternate method of testing if a variable is actually set or not:
<?php
var_dump ( array_key_exists ( ‘c’ , get_defined_vars ())); // false
var_dump (isset( $c )); // also false
var_dump ( $c ); // manipulate $c a bit.
var_dump ((string) $c );
var_dump ( print_r ( $c , true ));
var_dump ( $a = $c );
var_dump ( array_key_exists ( ‘c’ , get_defined_vars ())); // . still false
var_dump ( $c = NULL ); // this sets $c
var_dump ( array_key_exists ( ‘c’ , get_defined_vars ())); // true!
var_dump (isset( $c )); // false; isset() still says it’s unset
unset( $c ); // actually unset it
var_dump ( array_key_exists ( ‘c’ , get_defined_vars ())); // false
var_dump ( $a =& $c );
var_dump ( array_key_exists ( ‘c’ , get_defined_vars ())); // true!
unset( $c ); // unset it again
var_dump (& $c ); // &NULL
var_dump ( array_key_exists ( ‘c’ , get_defined_vars ())); // true!
?>

Obviously, null values take up space (or they wouldn’t show up in get_defined_vars). Also, note that &$v sets $v to NULL if it is unset.

Что такое isset в php

Если переменная объявлена, но ей изначально не присвоено никакого значения (иначе говоря она не инициализирована), или если переменная вовсе неопределена, то нам будет проблематично ее использовать. Например:

При попытке вывести значение переменной мы получим диагностическое сообщение о том, что переменная не определена:

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

Для проверки существования переменной PHP предоставляет ряд встроенных функций.

Оператор isset

Функция isset() позволяет определить, инициализирована ли переменная или нет. Если переменная определена, то isset() возвращает значение true . Если переменная не определена, то isset() возвращает false . Также если переменная имеет значение null функция isset() также возвращает false .

Здесь переменная $message не инициализирована, поэтому выражение isset($message) будет возвращать значение false .

Теперь пусть переменная $message имеет начальное значение:

В этом случае выражение isset($message) будет возвращать true , поэтому будет выполняться инструкция echo $message :

Однако если переменной присвоено начальное значение null , то опять же будет считаться, что эта переменная не установлена:

empty

Функция empty() проверяет переменную на «пустоту». «Пустая» переменная — это переменная, значение которой равно null , 0, false или пустой строке — в этом случае функция empty() возвращает true :

Здесь переменная $message хранит пустую строку, поэтому выражение empty($message) возвратит true .

При этом если строка содержит даже хотя бы один пробел и больше ничего ( $message = » » ), то такая строка уже не считается пустой.

unset

С помощью функции unset() мы можем уничтожить переменную:

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

Похожие статьи