Reputation: 5714
Consider this JavaScript statement:
isTouch = document.createTouch !== undefined
I would like to know if we have a similar statement in PHP, not being isset(), but literally checking for an undefined value. Something like:
$isTouch != ""
Is there something similar as the above in PHP?
Upvotes: 134
Views: 397518
Reputation: 1426
To check if a variable is set you need to use the isset function.
$lorem = 'potato';
if(isset($lorem)){
echo 'isset true' . '<br />';
}else{
echo 'isset false' . '<br />';
}
if(isset($ipsum)){
echo 'isset true' . '<br />';
}else{
echo 'isset false' . '<br />';
}
This code will print:
isset true
isset false
Read more in isset.
Upvotes: 11
Reputation: 31739
You can use -
$isTouch = isset($variable);
It will return true
if the $variable
is defined. If the variable is not defined it will return false
.
Note: It returns TRUE if the variable exists and has a value other than NULL, FALSE otherwise.
If you want to check for false
, 0
, etc., you can then use empty()
-
$isTouch = empty($variable);
empty()
works for -
Upvotes: 248
Reputation: 1750
The easiest way to check if a variable
or array index
exists (is defined) and is not null and is not empty and is not false:
#1
if($variable ?? false)
echo '$variable is defined';
else
echo '$variable is not defined';
// Result: $variable is not defined
#2
$variable = null;
if($variable ?? false)
echo '$variable is not null';
else
echo '$variable is null';
// Result: $variable is null
#3
$variable = false;
if($variable ?? false)
echo '$variable is not false';
else
echo '$variable is false';
// Result: $variable is false
#4
$variable = '';
if($variable ?? false)
echo '$variable is not empty';
else
echo '$variable is empty';
// Result: $variable is empty
Upvotes: 3
Reputation: 71
You can use the ternary operator to check whether the value is set by POST/GET or not. Something like this:
$value1 = $_POST['value1'] = isset($_POST['value1']) ? $_POST['value1'] : '';
$value2 = $_POST['value2'] = isset($_POST['value2']) ? $_POST['value2'] : '';
$value3 = $_POST['value3'] = isset($_POST['value3']) ? $_POST['value3'] : '';
$value4 = $_POST['value4'] = isset($_POST['value4']) ? $_POST['value4'] : '';
Upvotes: 7
Reputation: 443
Another way is simply:
if($test){
echo "Yes 1";
}
if(!is_null($test)){
echo "Yes 2";
}
$test = "hello";
if($test){
echo "Yes 3";
}
Will return:
"Yes 3"
The best way is to use isset(). Otherwise you can have an error like "undefined $test".
You can do it like this:
if(isset($test) && ($test!==null))
You'll not have any error, because the first condition isn't accepted.
Upvotes: 25
Reputation: 6682
JavaScript's 'strict not equal' operator (!==
) on comparison with undefined
does not result in false
on null
values.
var createTouch = null;
isTouch = createTouch !== undefined // true
To achieve an equivalent behaviour in PHP, you can check whether the variable name exists in the keys of the result of get_defined_vars()
.
// just to simplify output format
const BR = '<br>' . PHP_EOL;
// set a global variable to test independence in local scope
$test = 1;
// test in local scope (what is working in global scope as well)
function test()
{
// is global variable found?
echo '$test ' . ( array_key_exists('test', get_defined_vars())
? 'exists.' : 'does not exist.' ) . BR;
// $test does not exist.
// is local variable found?
$test = null;
echo '$test ' . ( array_key_exists('test', get_defined_vars())
? 'exists.' : 'does not exist.' ) . BR;
// $test exists.
// try same non-null variable value as globally defined as well
$test = 1;
echo '$test ' . ( array_key_exists('test', get_defined_vars())
? 'exists.' : 'does not exist.' ) . BR;
// $test exists.
// repeat test after variable is unset
unset($test);
echo '$test ' . ( array_key_exists('test', get_defined_vars())
? 'exists.' : 'does not exist.') . BR;
// $test does not exist.
}
test();
In most cases, isset($variable)
is appropriate. That is aquivalent to array_key_exists('variable', get_defined_vars()) && null !== $variable
. If you just use null !== $variable
without prechecking for existence, you will mess up your logs with warnings because that is an attempt to read the value of an undefined variable.
However, you can apply an undefined variable to a reference without any warning:
// write our own isset() function
function my_isset(&$var)
{
// here $var is defined
// and initialized to null if the given argument was not defined
return null !== $var;
}
// passing an undefined variable by reference does not log any warning
$is_set = my_isset($undefined_variable); // $is_set is false
Upvotes: 4
Reputation: 3619
isset()
function does not check if a variable is defined.It seems you've specifically stated that you're not looking for isset()
in the question. I don't know why there are so many answers stating that isset()
is the way to go, or why the accepted answer states that as well.
It's important to realize in programming that null is something. I don't know why it was decided that isset()
would return false if the value is null.
To check if a variable is undefined you will have to check if the variable is in the list of defined variables, using get_defined_vars()
. There is no equivalent to JavaScript's undefined (which is what was shown in the question, no jQuery being used there).
In the following example it will work the same way as JavaScript's undefined check.
$isset = isset($variable);
var_dump($isset); // false
But in this example, it won't work like JavaScript's undefined check.
$variable = null;
$isset = isset($variable);
var_dump($isset); // false
$variable
is being defined as null, but the isset()
call still fails.
Using get_defined_vars()
will return an associative array with keys as variable names and values as the variable values. We still can't use isset(get_defined_vars()['variable'])
here because the key could exist and the value still be null, so we have to use array_key_exists('variable', get_defined_vars())
.
$variable = null;
$isset = array_key_exists('variable', get_defined_vars());
var_dump($isset); // true
$isset = array_key_exists('otherVariable', get_defined_vars());
var_dump($isset); // false
However, if you're finding that in your code you have to check for whether a variable has been defined or not, then you're likely doing something wrong. This is my personal belief as to why the core PHP developers left isset()
to return false when something is null.
Upvotes: 36
Reputation: 905
You can use the PHP isset() function to test whether a variable is set or not. The isset() will return FALSE if testing a variable that has been set to NULL. Example:
<?php
$var1 = '';
if(isset($var1)){
echo 'This line is printed, because the $var1 is set.';
}
?>
This code will output "This line is printed, because the $var1 is set."
read more in https://stackhowto.com/how-to-check-if-a-variable-is-undefined-in-php/
Upvotes: 5