Un método más seguro es implementar tu propio analizador sintáctico, léxico y parser, etc., para interpretar dichas expresiones y construir algo bajo tus propias condiciones.
Obviamente es mucho esfuerzo, pero es más seguro en comparación de eval().
Te sugiero buscar proyectos que te permitan ello, en GitHub y Packagist hay varios, ya los he visto.