Pregunta

Básicamente, lo que quiero saber es, para el segundo parámetro de la función create_function, hay alguna forma de pasar una cadena sin un punto y coma? o será que no funcione.

ejemplo:

taken from php.net
create_function('$a,$b', 'return "CRCs: " . crc32($a) . " , ".crc32(b);'),

anuncio de que no es un punto y coma en la cadena. ¿hay alguna manera posible de que alguien pueda entrar en una función sin un punto y coma que todavía se ejecutará / evaluar?

¿Fue útil?

Solución

No, no es posible. PHP es sensible punto y coma, que se debe utilizar para poner fin a cada declaración antes de apoyos adecuados. Incluso he intentado función regular de esta manera:

function f() {
  return 1
}

y se ensartó un error de sintaxis, a diferencia de JavaScript.

Otros consejos

Con create_function () va a crear una función anónima. El segundo parámetro es una cadena que es el código de la función (como cualquier otra función que iba a escribir). No tiene que terminar en un punto y coma, por ejemplo:

$coolfunction = create_function('$thing', 'if ($thing > 0) {return "Yes"; } else { return "no!"; }');

echo $coolfunction(1) . ' and ' . $coolfunction(-1);

termina en un '}' e imprime: Sí y no

Siempre se debe desinfectar cualquier entrada del usuario antes de usarlo. Le sugiero que busque el punto y coma en la entrada del usuario, si no lo tiene, lo añadirá.

Si el usuario puede introducir nada aquí todavía tiene un problema si entra un nombre de función no válida o simplemente basura.

preg_match () puede (aunque estoy no un experto en preg así que voy a dejar que otra persona ayuda a otra persona por ahí).

En primer lugar, ¿por qué necesita eso? Esa es una forma muy sucio para crear una función. Esperanza porque quiere hacer una interfaz donde la gente puede crear directamente una función (y esto será sólo para usted o que va a ser un gran problema de seguridad). Realmente no entiendo cómo desea utilizar eso.

De todos modos, para que usted pregunta, usted no tiene que preocuparse si está funcionando o no. Es decir, la prueba solo si está funcionando, si no sólo hay que poner por sí mismo un punto y coma. Es sólo una simple prueba en una cadena.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top