|  | Posted by Oli Filth on 06/18/35 11:45 
Jerry Stuckle wrote:> Oli Filth wrote:
 > > Jerry Stuckle said the following on 09/04/2006 06:14:
 > >
 > >> Oli Filth wrote:
 > >>
 > >>> I have error level set to E_ALL | E_STRICT.  The following code
 > >>> executes fine:
 > >>>     <?php
 > >>>
 > >>>     function getValueWithDefault(&$array, $key, $default = NULL)
 > >>>     {
 > >>>         return (isset($array[$key])) ? $array[$key] : $default;
 > >>>     }
 > >>>
 > >>>     $var = array();
 > >>>     echo getValueWithDefault($var, "Roger", "Dodger") . "\n";
 > >>>
 > >>>     ?>
 > >>>
 > >>> I see no reason why an error/warning should get thrown.  isset()
 > >>> simply looks for an element with the specified key name in the
 > >>> associative array.  In an empty array, the key doesn't exist, so
 > >>> isset() returns false.
 > >>>
 > >>
 > >> That's not what I said.  I said if $var is EMPTY.
 > >
 > >
 > >  From the PHP manual for empty():
 > >
 > >     "The following things are considered to be empty:
 > >     ...
 > >     array() (an empty array)
 > >     ..."
 > >
 >
 > Yes, the array is empty.  But $var is not!  It contains an empty array.
 
 No, $var doesn't *contain* an empty array, $var *is* an empty array.
 
 <?php
 $var = array();
 echo empty($var) ? "TRUE" : "FALSE";    // echoes "TRUE"
 ?>
 
 
 > >> Take out the $var=array() line and see what you get.
 > >
 > > So you mean "undefined"?  Going back to the original purpose of this
 > > function/macro, why would you ever want to call it on an undefined array?
 > >
 > Because it may or may not exist, that's why.
 
 I thought the purpose was to check for the existence of an *entry* in
 an associative array, such as $_POST, etc.
 
 On the other hand, checking for the existence of a *variable* implies
 bad practice.  There should be no need.  You should always know a
 priori what variables exist at any given point in your code (assuming
 the wonders of register_globals are disabled).
 
 
 > > But anyway, removing the $var = array() line does not result in any
 > > error/warning.  Because it's being passed by reference, PHP
 > > automatically creates a variable $var in the global scope (because for
 > > all it knows, this could be an output argument for the function).
 >
 > Yep, and now you have changed the variable, haven't you?
 
 Only if it was undefined in the first place, which would be bad
 practice.
 
 --
 Oli
  Navigation: [Reply to this message] |