PHP 类常量与 php 函数常量给出警告

Dio*_*jen 3 php constants class-constants

我有一个常量,我想通过这样的函数返回:

public function getConst($const)
{
    $const = constant("Client::{$const}");
    return $const;
}
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误:

constant(): Couldn't find constant Client::QUERY_SELECT
Run Code Online (Sandbox Code Playgroud)

然而,这确实有效:

public function getConst($const)
{
    return Client::QUERY_SELECT;
}
Run Code Online (Sandbox Code Playgroud)

为什么不?

dec*_*eze 5

事实上这工作得很好: http: //3v4l.org/pkNXs

class Client {
    const QUERY_SELECT = 'foo';
}

$const = 'QUERY_SELECT';
echo constant("Client::{$const}");  // foo
Run Code Online (Sandbox Code Playgroud)

失败的唯一原因是如果您位于命名空间中:

namespace Test;

class Client {
    const QUERY_SELECT = 'foo';
}

$const = 'QUERY_SELECT';
echo constant("Client::{$const}");  // cannot find Client::QUERY_SELECT
Run Code Online (Sandbox Code Playgroud)

原因是字符串类名无法根据名称空间解析进行解析。您必须使用完全限定的类名:

echo constant("Test\Client::{$const}");
Run Code Online (Sandbox Code Playgroud)

为了简单起见,您可以在这里使用__NAMESPACE__魔法常数。