predefinidas expresiones example ejemplos declaracion constantes clases php class-constants

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);



<?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'');