在PHP中动态访问类常量

时间:2018-01-16 18:46:57

标签: php constants class-constants

我希望能够动态查找常量的值,但使用变量并不能使用语法。

<?php
class Food {
    const FRUITS = 'apple, banana, orange';
    const VEGETABLES = 'spinach, carrot, celery';
}

$type = 'FRUITS';

echo Food::FRUITS;
echo Food::$type;

?>

给出

apple, banana, orange

Fatal error: Access to undeclared static property: Food::$type

如何动态调用常量?

4 个答案:

答案 0 :(得分:2)

我头脑中唯一的解决方案是使用constant函数:

echo constant('Food::' . $type);

在这里,您可以创建一个常量的名称(包括类)作为字符串,并将此字符串('Food::FRUITS')传递给constant函数。

答案 1 :(得分:1)

可以使用ReflectionClass获取所有常量的数组,然后可以从那里找到特定常量的值:

<?php
class Food {
    const FRUITS = 'apple, banana, orange';
    const VEGETABLES = 'spinach, carrot, celery';
}

$type = 'FRUITS';

$refClass = new ReflectionClass('Food');
$constants = $refClass->getConstants();

echo $constants[$type];

?>

答案 2 :(得分:0)

在使用名称空间时,请确保包括名称空间,即使该名称空间已自动加载。

namespace YourNamespace;

class YourClass {
  public const HELLO = 'WORLD'; 
}

$yourConstant = 'HELLO';

// Not working
// >> PHP Warning:  constant(): Couldn't find constant YourClass::HELLO ..
constant('YourClass::' . $yourConstant);

// Working
constant('YourNamespace\YourClass::' . $yourConstant);```

答案 3 :(得分:0)

您可以创建关联数组

class Constants{
  const Food = [
      "FRUITS " => 'apple, banana, orange',
      "VEGETABLES" => 'spinach, carrot, celery'
  ];
}

和这样的访问值

$type = "FRUITS";

echo Constants::Food[$type];