El problema más grande es que esta función es bastante inútil. Vamos a sustituir que con un ejemplo real (hipotéticamente de trabajo):
function isAnd($var, $value, $operator = '==') {
return isset($var) && $var $operator $value;
}
isAnd($foo, 1, '===');
En este ejemplo $foo
no está establecida. Obtendrá un error porque está intentando pasar una variable inexistente ($foo
) a una función (isAnd
). Por lo tanto, tendrá que poner a prueba $foo
para isset
antes de llamar isAnd
:
isset($foo) && isAnd($foo, 1, '===');
Por lo tanto, cualquier variable que nunca entra en la función isAnd
se establece definitivamente. No necesita probarlo dentro de la función. Entonces todo el ejercicio es bastante inútil.
Lo que puede ser confuso es que isset()
y empty()
no tienen esta limitación, es decir que puede pasar una variable inexistente a ellos sin error. El asunto es sin embargo, estas no son funciones normales, son construcciones de lenguaje especiales (que parecen funciones, culpan a PHP). Desafortunadamente usted no puede hacer este tipo de construcciones, los parámetros para sus funciones siempre deben existir.
Simplemente debe acostumbrarse a escribir isset($foo) && $foo === 1
. Con el código adecuadamente estructurado, puede reducir esto al mínimo declarando siempre todas las variables que va a utilizar, lo que es una buena práctica de todos modos.
Para el operador dinámico ... necesitará algún tipo de if ... else
en algún lugar para decidir qué operador usar de todos modos. En lugar de establecer la variable de operador y luego evaluarla, ¿no es más fácil hacer la evaluación allí mismo?
¿Cuál es el objetivo de tal función? La llamada a la función es mucho más larga que la operación en sí y no puedo pensar en algo útil que hacer con eso. – soulmerge
Puede hacerlo si usa Scheme. Puede ser un patrón muy poderoso. – Skilldrick