On 06 Feb 2012 at 09:48, Adam Richardson <simpleshot@xxxxxxxxx> wrote: > On Mon, Feb 6, 2012 at 4:25 AM, Adam Richardson <simpleshot@xxxxxxxxx>wrote: > >> On Mon, Feb 6, 2012 at 4:07 AM, Tim Streater <tim@xxxxxxxxxxxxxxxx> wrote: >> I disagree that the nested function is a straw-man. I (just as the other >> authors I'd linked to describing the "arrow" pattern of code) have seen >> plenty of examples of similar code. I guess what I meant was, that I'd never have written it that way in the first place, so as an example it felt contrived. Amateurs or people with no training (in particular physicists at CERN 40 years ago) should be kept well clear of the goto. I'd probably write your function like this: function val_nested ($name = null, $value = null, $is_mutable = false) { static $values = array(); static $mutables = array(); if ($name===null) return $values; if ($value===null) return isset($values[$name]) ? $values[$name] : null; if (isset($values[$name])) { if (!$val_is_mutable = in_array($name, $mutables)) // Set existing value { $msg = 'The value "' . $name . '" is immutable and has already been set to ' . $values[$name] . '.'; throw new Exception ($msg); } return $values[$name] = $value; } if ($is_mutable) $mutables[] = $name; // Set new value $values[$name] = $value; return $value; } I always add blank lines for clarity. Remove those and the above is 30% shorter than yours - as far as I could tell, none of the else clauses was required. My approach is: 1) deal with the trivial and error cases first 2) deal with the real work next -- Cheers -- Tim
-- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php