Posts Tagged ‘String’

PHP singleton util class for checking and returning valid boolean value for use in AMFPHP

Friday, February 6th, 2009

Seasoned Flash developers should note that PHP booleans are converted to strings as follows: true -> “1″, false -> “”. This can cause some confusion when inserting Flash booleans into a database; a simple workaround is $bool ? "true" : "false".

Taken from http://amfphp.org/docs/datatypes.html

As I had this problem with my Flex+AMFPHP project, I decided to write util class that will deal with this issue.

<?php
 
/**
 * This class is singleton class for checking and returning valid boolean value
 * for use in AMFPHP (or other remoting services).
 *
 * For more info on this problem refer to: http://amfphp.org/docs/datatypes.html
 *
 * Use Example:
 * $stringBool = BoolUtil::getInstance()->getBool(false,true); //returns "false"
 * $stringBool = BoolUtil::getInstance()->getBool(true,true); //returns "true"
 * $stringBool = BoolUtil::getInstance()->getBool(0,true); //returns "false"
 * $stringBool = BoolUtil::getInstance()->getBool("off",true); //returns "false"
 * $stringBool = BoolUtil::getInstance()->getBool("True",true); //returns "true"
 *
 *
 * @author Marko Kecman <mkecman[at]gmail.com>
 */
class BoolUtil {
 
    /** Checks a variable to see if it should be considered a boolean true or false.
     *     Also takes into account some text-based representations of true of false,
     *     such as 'false','N','yes','on','off', etc.
     * @author Samuel Levy <sam+nospam@samuellevy.com>
     * @modified by Marko Kecman <mkecman[at]gmail.com>
     * @param mixed $value The variable to check
     * @param bool $strict If set to false, consider everything that is not false to be true.
     * @return string The string representation of boolean equivalent or null
     */
    function getBool($value, $strict=false)
    {
        $out = null;
        // if not strict, we only have to check if something is false
        if (in_array($in,array('false', 'False', 'FALSE', 'no', 'No', 'n', 'N', '0', 'off','Off', 'OFF', false, 0, null), true))
        {
            $out = "false";
        }
 
        if ($strict)
        {
            // if strict, check the equivalent true values
            if (in_array($value,array('true', 'True', 'TRUE', 'yes', 'Yes', 'y', 'Y', '1','on', 'On', 'ON', true, 1), true))
            {
                $out = "true";
            }
        }
        else
        {
            // not strict? let the regular php bool check figure it out (will largely default to true)
            $out = ( $value ? "true" : "false" );
        }
        return $out;
    }
 
    function &getInstance ()
    // this implements the 'singleton' design pattern.
    {
        static $instance;
 
        if (!isset($instance)) {
            $c = __CLASS__;
            $instance = new $c;
        } // if
 
        return $instance;
 
    } // getInstance
 
}
?>

There is also problem with converting string to boolean in ActionScript. Check this example for classic string to boolean casting (as you would expect to work correctly):

 var test:Boolean = Boolean("false"); //returns true
var test:Boolean = Boolean("0"); //returns true
var test:Boolean = Boolean(""); //returns false

In order to avoid this issue, I wrote util class for ActionScript 3 that will do valid String to Boolean convert.

package org.xgeek.markokecman.business.util
{
	public class BoolUtil
	{
		public static function StringToBoolean ( value:String ) : Boolean
		{
			if ( value.toLowerCase() == "false" )
			{
				return false;
			}
			else
			if ( value.toLowerCase() == "true" )
			{
				return true;
			}
			else
			{
				return null;
			}
		}
 
	}
}

In next version, I’ll expand this class to something similar to PHP version above.