Re: [PHP] is_null() and is_string() reversed when using in switch case statements... [SOLVED]

2011-07-15 Thread Jim Lucas
On 7/14/2011 7:44 PM, Daevid Vincent wrote:
 Ah! Thanks Simon! That is exactly right. Doh! I should have thought of
 that... *smacks head*
 
 Here is the fruit of my labor (and your fix)...
 
 /**
  * Useful for debugging functions to see parameter names, etc.
  * Based upon http://www.php.net/manual/en/function.func-get-args.php#103296
  *
  * function anyfunc($arg1, $arg2, $arg3)
  * {
  *   debug_func(__FUNCTION__, '$arg1, $arg2, $arg3', func_get_args());
  *   //do useful non-debugging stuff
  * }
  *
  * @accesspublic
  * @returnstring
  * @param string $function_name __FUNCTION__ of the root function as
 passed into this function
  * @param string $arg_names the ',,,' encapsulated parameter list of
 the root function
  * @param array $arg_vals the result of func_get_args() from the root
 function passed into this function
  * @param boolean $show_empty_params (FALSE)
  * @authorDaevid Vincent
  * @date  2011-17-14
  * @see   func_get_args(), func_get_arg(), func_num_args()
  */
 function debug_func($function_name, $arg_names, $arg_vals,
 $show_empty_params=FALSE)
 {
 $params = array();
 echo $function_name.'(';
 $arg_names_array = explode(',', $arg_names);
 //var_dump($arg_names, $arg_names_array, $arg_vals );
 foreach($arg_names_array as $k = $parameter_name)
 {
$v = $arg_vals[$k];
//echo k = $parameter_name = $k and v = arg_vals[k] = $vbr\n;
 switch(true)
 {
   case is_string($v): if ($show_empty_params) $v = '.$v.'
 ; break;
   case is_null($v): if ($show_empty_params) $v = '{NULL}';
 break;
   case is_bool($v): $v = ($v) ? '{TRUE}' : '{FALSE}'; break;
   case is_array($v): (count($v)  10) ? $v =
 '['.implode(',',$v).']' : $v = '[ARRAY]'; break;
   case is_object($v): $v = '{CLASS::'.get_class($v).'}';
 break;
   case is_numeric($v): break;
 }
 
 if ($show_empty_params || $v) $params[$k] = trim($parameter_name).':
 '.$v;
 }
 echo implode(', ',$params).)br/\n;
 }
 
 
 

Can you give an example of where this might be useful?

Jim Lucas

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



RE: [PHP] is_null() and is_string() reversed when using in switch case statements... [SOLVED]

2011-07-14 Thread Daevid Vincent
 -Original Message-
 From: Simon J Welsh [mailto:si...@welsh.co.nz]
 Sent: Thursday, July 14, 2011 7:29 PM
 To: Daevid Vincent
 Cc: php-general@lists.php.net
 Subject: Re: [PHP] is_null() and is_string() reversed when using in switch
 case statements...
 
 On 15/07/2011, at 1:58 PM, Daevid Vincent wrote:
 
  function test($v)
  {
  var_dump($v);
 
  if (is_string($v)) echo FOUND A STRING.\n;
  if (is_null($v)) echo FOUND A NULL.\n;
 
  switch ($v)
  {
  case is_string($v):
  echo I think v is a string, so this is broken.\n;
  break;
  case is_null($v):
  echo I think v is null, so this is broken.\n;
  break;
  case is_object($v):
  $v = '{CLASS::'.get_class($v).'}';
  echo I think v is a class $v\n;
  break;
 
  case is_bool($v):
  $v = ($v) ? '{TRUE}' : '{FALSE}';
  echo I think v is boolean $v\n;
  break;
  case is_array($v):
  $v = '['.implode(',',$v).']';
  echo I think v is an array $v\n;
  break;
  case is_numeric($v):
  echo I think v is a number $v\n;
  break;
  }
  }
 
 In both cases, $v is equivalent to false, so is_string(NULL) = false ==
NULL
 == $v, likewise for is_null($v);
 
 You're most likely after switch(true) { . } rather than switch($v)
 ---
 Simon Welsh
 Admin of http://simon.geek.nz/

Ah! Thanks Simon! That is exactly right. Doh! I should have thought of
that... *smacks head*

Here is the fruit of my labor (and your fix)...

/**
 * Useful for debugging functions to see parameter names, etc.
 * Based upon http://www.php.net/manual/en/function.func-get-args.php#103296
 *
 * function anyfunc($arg1, $arg2, $arg3)
 * {
 *   debug_func(__FUNCTION__, '$arg1, $arg2, $arg3', func_get_args());
 *   //do useful non-debugging stuff
 * }
 *
 * @access  public
 * @return  string
 * @param   string $function_name __FUNCTION__ of the root function as
passed into this function
 * @param   string $arg_names the ',,,' encapsulated parameter list of
the root function
 * @param   array $arg_vals the result of func_get_args() from the root
function passed into this function
 * @param   boolean $show_empty_params (FALSE)
 * @author  Daevid Vincent
 * @date  2011-17-14
 * @see func_get_args(), func_get_arg(), func_num_args()
 */
function debug_func($function_name, $arg_names, $arg_vals,
$show_empty_params=FALSE)
{
$params = array();
echo $function_name.'(';
$arg_names_array = explode(',', $arg_names);
//var_dump($arg_names, $arg_names_array, $arg_vals );
foreach($arg_names_array as $k = $parameter_name)
{
 $v = $arg_vals[$k];
 //echo k = $parameter_name = $k and v = arg_vals[k] = $vbr\n;
switch(true)
{
case is_string($v): if ($show_empty_params) $v = '.$v.'
; break;
case is_null($v): if ($show_empty_params) $v = '{NULL}';
break;
case is_bool($v): $v = ($v) ? '{TRUE}' : '{FALSE}'; break;
case is_array($v): (count($v)  10) ? $v =
'['.implode(',',$v).']' : $v = '[ARRAY]'; break;
case is_object($v): $v = '{CLASS::'.get_class($v).'}';
break;
case is_numeric($v): break;
}

if ($show_empty_params || $v) $params[$k] = trim($parameter_name).':
'.$v;
}
echo implode(', ',$params).)br/\n;
}



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php