It's rare to find functionality that cannot be effectively implemented
in userland PHP code, but this appears to be one of them.
 
The issue here is the capability to check if an array index (or
variable) is set, if so, return its value, or return a passed in default
value. This can be accomplished using if statements or the ternary
operator, but they quickly become tiresome for so routine a task.
Especially when dealing with nested associative arrays, for example:
 
$myVar =
(isset($_SESSION['application']['section']['page']['title']))?$_SESSION[
'application']['section']['page']['title']:"Default Title";
 
Wouldn't this be better:
 
$myVar =
getd($_SESSION['application']['section']['page']['title'],"Default
Title"); 
 
At first glance defining a function that will accomplish this appears
easy:
 
function getd($var,$default='')
{
     if(isset($var))
          return $var;
     else
          return $default;
}
 
$myVar = getd($arr['noindex']);
 
But this is not notice level compliant, producing an error if the index
doesn't already exist.
 
Re-writing the function to pass by reference seems to fix this at first
glance:
 
function getd(&$var,$default='')
{
 . . .
}
 
$myVar = getd($arr['noindex']);
 

It no longer gives a notice. But the call mentioned above will now
create the index mentioned, setting its value to null, which, while not
necessarily wrong, still means that a foreach iteration or array_keys()
call will show that the key now exists. (though isset() will not.)
 
Since writing a userland function to accomplish this seems impossible
while maintaining notice-level compliance, could this be accomplished at
the language level? Perhaps by adding a statement similar to isset? It
would seem a very helpful addition to PHP and would not need to affect
other language constructs.

Reply via email to