我想通过这样的函数返回一个常量:
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;
}
为什么不呢?
最佳答案
事实上这工作得很好: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
原因是字符串类名无法根据 namespace 解析进行解析。您必须使用完全限定的类名:
echo constant("Test\Client::{$const}");
为了简单起见,您可以在此处使用 __NAMESPACE__
魔术常量。
关于PHP 类常量与 php 函数常量给出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24725292/