Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:4073 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 32653 invoked from network); 18 Aug 2003 21:26:35 -0000 Received: from unknown (HELO blobule.suds) (66.11.170.154) by pb1.pair.com with SMTP; 18 Aug 2003 21:26:35 -0000 Received: by blobule.suds (Postfix, from userid 501) id 226A12F717; Mon, 18 Aug 2003 17:26:35 -0400 (EDT) To: Griggs Domler Cc: internals@lists.php.net In-Reply-To: <017801c365cc$22455a10$6901a8c0@dexby> References: <017801c365cc$22455a10$6901a8c0@dexby> Content-Type: text/plain Content-Transfer-Encoding: 7bit X-Mailer: Ximian Evolution 1.0.8-3mdk Date: 18 Aug 2003 17:26:35 -0400 Message-ID: <1061241995.32231.4.camel@blobule.suds> Mime-Version: 1.0 Subject: Re: [PHP-DEV] Get value if set, or default From: robert@wocmud.org (Robert Cummings) 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. | `---------------------------------------------'