定义一个名称空间中的多个类可能使用的常量的最佳方法是什么?我试图避免太多的继承,所以扩展基类不是一个理想的解决方案,我正在努力使用traits找到一个好的解决方案.这在PHP5.4中是可能的,还是应该采取不同的方法?

我有以下情况:

trait Base
{
    // Generic functions
}

class A 
{
    use Base;
}

class B 
{
    use Base;
}

问题是不可能在PHP特性中定义常量.理想情况下,我想要如下内容:

trait Base
{
    const SOME_CONST = 'someconst';
    const SOME_OTHER_CONST = 'someotherconst';

    // Generic functions
}

然后可以通过应用特征的类访问这些特征:

echo A::SOME_CONST;
echo B::SOME_OTHER_CONST;

但由于性格的局限性,这是不可能的.有什么 idea 吗?

推荐答案

我最终使用了user sectus's suggestion个界面,因为这感觉是处理这个问题最简单的方法.使用接口来存储常量而不是API契约有一种不好的味道,尽管这可能更多地是关于OO设计而不是特性实现.

interface Definition
{
    const SOME_CONST = 'someconst';
    const SOME_OTHER_CONST = 'someotherconst';
}

trait Base
{
    // Generic functions
}

class A implements Definition
{
    use Base;
}

class B implements Definition
{
    use Base;
}

这允许:

A::SOME_CONST;
B::SOME_CONST;

Php相关问答推荐

如何在WooCommerce HPOS订单列表中创建自定义过滤器?

提交表格后的重定向不起作用

无法添加ProxyClass__setInitialized()上的忽略

dockerized laravel服务器拒绝POST请求

闭包绑定$This和垃圾收集器

从订单项目中获取ACF WooCommerce产品价值

我的邮箱中的链接在我的URL中添加了一个

从目录文件夹中获取文件并追加到 Select 下拉列表(选项)-wordpress/wc

为什么只有最后一次点击的点赞/心形会按预期改变 colored颜色 ,而其他的保持正常 colored颜色 ?

升级到PHP 8.2后无法删除cURL Cookie文件

在php中,方法之间的属性链接是如何工作的

如何用Ubuntu 22.04在VSCode中启用XDebug

登录后重定向在WooCommerce中购买产品的用户

WooCommerce中特定付款方式的变更订单预留库存时间

在WooCommerce循环中添加子类别和产品之间的分隔符

如果所有请求都通过index.php路由,如何使用htaccess文件强制使用HTTPS?

对产品/库存结果集进行分组和计数,形成多维分层数组

如何在 Laravel 中app文件夹之外的文件夹内创建文件路径?

symfony/notifier + twig/inky-extra 在 dunglas/symfony-docker 中缺少 ext-xsl.

同一页面上多个组件的 Livewire 分页问题