How to parse a string of boolean logic in PHP
Just stumbled upon this question, but being fairly uneasy about using eval
, I decided to keep looking for a better solution.
What I discovered is yet another wonderful use for PHP's filter_var
function, when passing in the FILTER_VALIDATE_BOOLEAN
flag (of which there are many).
This "one line" function seems to do well at safely converting a string (or other) object to a boolean:
<?php/** * Uses PHP's `filter_var` to validate an object as boolean * @param string $obj The object to validate * @return boolean */function parse_boolean($obj) { return filter_var($obj, FILTER_VALIDATE_BOOLEAN);}
And, a little testing:
/** * Let's do some testing! */$tests = array ( "yes", "no", "true", "false", "0", "1");foreach($tests as $test) { $bool = parse_boolean($test); echo "TESTED: "; var_dump($test); echo "GOT: "; var_dump($bool); echo "\n\n";}
Output:
/*TESTED: string(3) "yes"GOT: bool(true)TESTED: string(2) "no"GOT: bool(false)TESTED: string(4) "true"GOT: bool(true)TESTED: string(5) "false"GOT: bool(false)TESTED: string(1) "0"GOT: bool(false)TESTED: string(1) "1"GOT: bool(true)*/
I haven't looked deep enough, but it's possible that this solution relies on eval
down the line somewhere, however I'd still side with using those over plain eval
ing since I assume that filter_var
would also handle sanitizing any input before piping it through eval
.
eval()
will work perfectly fine for this, but remember you have to tell it to return something.
$string = "true && true || false";$result = eval("return (".$string.");"); // $result will be true
Also make sure you sanitize any user inputs if putting them directly into an eval()
.