我想要通过这样的函数返回常量:
public function getConst($const)
{
$const = constant("Client::{$const}");
return $const;
}
但是这给了我一个错误:
constant(): Couldn't find constant Client::QUERY_SELECT
然而,这确实有效:
public function getConst($const)
{
return Client::QUERY_SELECT;
}
为什么不呢?
答案 0 :(得分:3)
实际上这很好用:http://3v4l.org/pkNXs
class Client {
const QUERY_SELECT = 'foo';
}
$const = 'QUERY_SELECT';
echo constant("Client::{$const}"); // foo
这会失败的唯一原因是你是否在命名空间中:
namespace Test;
class Client {
const QUERY_SELECT = 'foo';
}
$const = 'QUERY_SELECT';
echo constant("Client::{$const}"); // cannot find Client::QUERY_SELECT
原因是无法根据命名空间解析来解析字符串类名。您必须使用完全限定的类名:
echo constant("Test\Client::{$const}");
为简单起见,您可以在此使用__NAMESPACE__
魔法常量。
答案 1 :(得分:1)
如果你想使用ReflectionClass,它会起作用。
$reflection = new ReflectionClass('Client');
var_dump($reflection->hasConstant($const));
更详细的例子,它可能是过度杀戮(未经测试)
public function getConst($const)
{
$reflection = new ReflectionClass(get_class($this));
if($reflection->hasConstant($const)) {
return (new ReflectionObject($reflection->getName()))->getConstant($const);
}
}