Actually Guy was merely showing that this is indeed an internals issue,
since a practical (or efficient) way of accomplishing this cannot be
currently implemented in userland.

I agree that further PHP userland code discussion is not appropriate for
this list, but suffice it to say that we have looked at just about every
possible way to implement this, and have come to the conclusion that a
language statement, such as isset(), would be the best option.

Thanks.

Cheers,
Griggs

-----Original Message-----
From: Derick Rethans [mailto:[EMAIL PROTECTED] 
Sent: Monday, August 18, 2003 5:54 PM
To: Guy N. Hurst
Cc: Robert Cummings; [EMAIL PROTECTED]
Subject: Re: [PHP-DEV] Get value if set, or default


On Mon, 18 Aug 2003, Guy N. Hurst wrote:

> Hi,
> 
> The function Robert proposes only works for going one key deep.

Can you please keep discussions to php-general@ please.

Derick

-- 
"Interpreting what the GPL actually means is a job best left to those
                    that read the future by examining animal entrails."
------------------------------------------------------------------------
-
 Derick Rethans                                 http://derickrethans.nl/

 International PHP Magazine                          http://php-mag.net/
------------------------------------------------------------------------
-


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']))?$_SESSIO
> N[
> '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.
-- 


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


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

Reply via email to