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

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

 



> -----Original Message-----
> From: Simon J Welsh [mailto:simon@xxxxxxxxxxx]
> Sent: Thursday, July 14, 2011 7:29 PM
> To: Daevid Vincent
> Cc: php-general@xxxxxxxxxxxxx
> Subject: Re:  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] = $v<br>\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



[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