expresiones - php class
Obtener el valor de la constante de clase elegida dinĂ¡micamente en PHP (6)
Me gustaría poder hacer algo como esto:
class ThingIDs
{
const Something = 1;
const AnotherThing = 2;
}
$thing = ''Something'';
$id = ThingIDs::$thing;
Esto no funciona ¿Hay alguna manera directa de hacer algo equivalente? Tenga en cuenta que estoy atrapado con la clase; está en una biblioteca que no puedo reescribir. Estoy escribiendo un código que toma argumentos en la línea de comandos, y me gustaría que tomara nombres simbólicos en lugar de números de identificación.
Función de ayuda
Puedes usar una función como esta:
function class_constant($class, $constant)
{
if ( ! is_string($class)) {
$class = get_class($class);
}
return constant($class . ''::'' . $constant);
}
Toma dos argumentos:
- Nombre de clase o instancia de objeto
- Nombre constante de clase
Si se pasa una instancia de objeto, se deduce su nombre de clase. Si usa PHP 7, puede usar ::class
para pasar el nombre de clase apropiado sin tener que pensar en espacios de nombres.
Ejemplos
class MyClass
{
const MY_CONSTANT = ''value'';
}
class_constant(''MyClass'', ''MY_CONSTANT''); # ''value''
class_constant(MyClass::class, ''MY_CONSTANT''); # ''value'' (PHP 7 only)
$myInstance = new MyClass;
class_constant($myInstance, ''MY_CONSTANT''); # ''value''
Si está utilizando espacios de nombres, debe incluir el espacio de nombres con la clase.
echo constant(''My/Application/ThingClass::ThingConstant'');
Si tiene una referencia a la clase en sí, puede hacer lo siguiente:
if (defined(get_class($course). ''::COURSES_PER_INSTANCE'')) {
// class constant is defined
}
Use la reflexión
$r = new ReflectionClass(''ThingIDs'');
$id = $r->getConstant($thing);
$id = constant("ThingIDs::$thing");
<?php
class Dude {
const TEST = ''howdy'';
}
function symbol_to_value($symbol, $class){
$refl = new ReflectionClass($class);
$enum = $refl->getConstants();
return isset($enum[$symbol])?$enum[$symbol]:false;
}
// print ''howdy''
echo symbol_to_value(''TEST'', ''Dude'');