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

标签 php constants class-constants

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

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/

相关文章:

Java 使用 HashMap 和 switch 语句

PHP:常量和按位分隔符作为方法的默认参数

c++ - 从函数返回类型中删除 const 是否会破坏 ABI?

javascript - 如何使用 PHP、AJAX 和 JS 的复选框来过滤类似产品?

php - 如何使 __set 也适用于 PHP 中的静态操作?

php - sql注入(inject)登录表单错误

c++ - 有没有办法告诉 openmp 共享数据是不变的?

c++ - 如何用顶级 const 解决这个问题?

typescript - 如何实现类常量?

php - 使用 mysqli_connect() 连接到 Cloud SQL 数据库