Sadece bu soruya tökezledi, ama kullanma konusunda oldukça tedirgin olmak eval
, daha iyi bir çözüm aramaya devam etmeye karar verdi.
PHP'nin filter_var
function, when passing in the FILTER_VALIDATE_BOOLEAN
bayrağı için başka harika kullanımı keşfetti (of which there are many).
Bu "tek satır" fonksiyonu bir mantıksal bir dize (veya diğer) nesne dönüştürme safely en iyi yapmak gibi görünüyor:
<?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);
}
Ve, küçük bir test:
/**
* 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)
*/
Ben varsayalım beri yeterince derin bakmadım, ama bu çözüm bir yere satır aşağı eval
dayanır mümkündür, ancak ben hala düz eval
ing üzerinde olanlar kullanarak yan ediyorum o filter_var
de eval
aracılığıyla boru önce herhangi bir giriş hijyen işlemek.