Why not augment the userland function to the following:

function getd( &$sourceArray, $key, $default=null )
{
    if( isset( $sourceArray[$key] ) )
    {
        return $sourceArray[$key];
    }

    return $default;
}

Cheers,
Rob.


On Mon, 2003-08-18 at 17:03, Griggs Domler wrote:
> 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.
-- 
.---------------------------------------------.
| Worlds of Carnage - http://www.wocmud.org   |
:---------------------------------------------:
| Come visit a world of myth and legend where |
| fantastical creatures come to life and the  |
| stuff of nightmares grasp for your soul.    |
`---------------------------------------------'

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to