Re: Re: [PHP] Long Live GOTO

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux