Ik ben bezig met een zelf gemaakte functie, alleen ik heb nou een vreemd probleem.
Op regel 175, het laaste argument, === false zit het probleem want als ik een var dump doe; regel 94 komt daar dit uit:
array(2) { [0]=> string(3) "===" [1]=> bool(true) }
Zoals je ziet is het een boolean, wat goed is alleen is de waarde true. Ik heb geen idee waar dit aan ligt?
Hopelijk hebben jullie enige idee?
PHP:
<?php
/* Gebruik:
if(mif(waardes, expressie))
het is automatisch een string, behalve:
true of false => boolean (let op: 0 en 1 zou die herkennen als een int!!!)
null => null
3 => int
3.5 => float
al het andere is een string dus je hoeft geen quotes te gebruiken:
if(mif('lennard', '===lennard')) => true
if(mif('lennard', '==="lennard"')) => false
nog een laaste voorbeeld:
if(mif('lennard', 15, 'abc', 'jelleh', '!== false')) betekend dus:
is lennard, 15, abc, jelleh niet gelijk aan false?
*/
function mif() {
$arguments = func_get_args();
$operators = array("===", "==", "!==", "<>", "!=", "<=", "<", ">=", ">");
$expressie = NULL;
foreach ($operators as $op) { /* Zoek de expressie */
$i = 0;
foreach ($arguments as $arg) {
if(substr($arg, 0, strlen($op)) == $op && $expressie === NULL) {
$expressie = array();
$expressie[0] = substr($arg, 0, strlen($op));
$expressie[1] = trim(substr($arg, strlen($op)));
/*
De waarde (expressie[1]) omzetten naar de correcte data type
Boolean, integer, float, null of anders is het een string
*/
switch (trim($expressie[1])) {
case "false":
case "FALSE":
case "TRUE":
case "true":
settype($expressie[1], "boolean");
break;
case "null":
case "NULL":
settype($expressie[1], "null");
break;
default:
if(is_numeric(trim($expressie[1])) && strpos(trim($expressie[1]), ".") === FALSE) {
settype($expressie[1], "integer");
} elseif(is_numeric(trim($expressie[1])) && strpos(trim($expressie[1]), ".") !== FALSE) {
settype($expressie[1], "float");
} else {
settype($expressie[1], "string"); /* Het is al een string, maar just to be sure */
}
break;
}
unset($arguments[$i]);
}
$i++;
}
}
for($i = 0; $i < count($arguments); $i++) {
if(gettype($arguments[$i]) == "string"){
switch (trim($arguments[$i])) {
case "false":
case "FALSE":
case "TRUE":
case "true":
settype($arguments[$i], "boolean");
break;
case "null":
case "NULL":
settype($arguments[$i], "null");
break;
default:
if(is_numeric(trim($arguments[$i])) && strpos(trim($arguments[$i]), ".") === FALSE) {
settype($arguments[$i], "integer");
} elseif(is_numeric(trim($arguments[$i])) && strpos(trim($arguments[$i]), ".") !== FALSE) {
settype($arguments[$i], "float");
} else {
settype($arguments[$i], "string"); /* Het is al een string, maar just to be sure */
}
break;
}
}
}
var_dump($expressie);
foreach ($arguments as $arg) {
switch ($expressie[0]) {
case "==":
if(!$arg == $expressie[1]) {
$output = TRUE;
} else {
return FALSE;
}
break;
case "===":
if($arg === $expressie[1]) {
$output = TRUE;
} else {
return FALSE;
}
break;
case "!=":
if($arg != $expressie[1]) {
$output = TRUE;
} else {
return FALSE;
}
break;
case "<>":
if($arg <> $expressie[1]) {
$output = TRUE;
} else {
return FALSE;
}
break;
case "!==":
if($arg !== $expressie[1]) {
$output = TRUE;
} else {
return FALSE;
}
break;
case "<":
if($arg < $expressie[1]) {
$output = TRUE;
} else {
return FALSE;
}
break;
case "<=":
if($arg <= $expressie[1]) {
$output = TRUE;
} else {
return FALSE;
}
break;
case ">=":
if($arg >= $expressie[1]) {
$output = TRUE;
} else {
return FALSE;
}
break;
case ">":
if($arg > $expressie[1]) {
$output = TRUE;
} else {
return FALSE;
}
break;
default:
return FALSE;
break;
}
}
return TRUE;
}
$a = 3.5;
$b = 3.5;
$c = 3.5;
/* Is $a, $b en $c gelijk aan 3.5? */
if(mif('test', '=== false')) {
echo "JA";
} else {
echo "nee";
}
?>
Op regel 175, het laaste argument, === false zit het probleem want als ik een var dump doe; regel 94 komt daar dit uit:
array(2) { [0]=> string(3) "===" [1]=> bool(true) }
Zoals je ziet is het een boolean, wat goed is alleen is de waarde true. Ik heb geen idee waar dit aan ligt?
Hopelijk hebben jullie enige idee?