Puede usar corchetes para construir el nombre de su función. No estoy seguro de compatibilidad con versiones anteriores, pero al menos PHP 7+ puede hacerlo.
Aquí está mi código cuando se utiliza carbono para sumar o restar tiempo basado en el tipo de usuario (de 'añadir' o 'sub') elegido:
$type = $this->date->calculation_type; // 'add' or 'sub'
$result = $this->contactFields[$this->date->{'base_date_field'}]
->{$type.'Years'}($this->date->{'calculation_years'})
->{$type.'Months'}($this->date->{'calculation_months'})
->{$type.'Weeks'}($this->date->{'calculation_weeks'})
->{$type.'Days'}($this->date->{'calculation_days'});
La parte importante aquí es la {$type.'someString'}
secciones. Esto generará el nombre de la función antes de ejecutarlo. Entonces, en el primer caso, si el usuario ha elegido 'agregar', {$type.'Years'}
se convierte en addYears
.
Muchas gracias. ¡Me salvaste un montón de irritación! – LibraryThingTim
Este es un método intrigante. ¿Es un riesgo de seguridad dar una SOLICITUD de acceso directo variable a esto? Si es así, ¿qué medidas se pueden tomar para prevenirlo? ¿Quizás una lista de funciones a las que solo desea dar acceso, y una comprobación en contra de esta lista cuando se encuentra la SOLICITUD var de este nombre? –
No debe dar acceso directo SOLICITUD (léase: SIEMPRE desinfecte la entrada del usuario). Una tabla de envío en la línea de la respuesta de Greg Hewgill es probablemente la mejor solución.Puede verificar la validez de la entrada REQUEST mediante array_key_exists(), solo asegúrese de citar los valores (sound_dog -> 'sound_dog') o enviará un aviso. – scribble