定义名称空间中许多类可能使用的常量的最佳方法是什么?我试图避免过多的继承,因此扩展基类并不是一个理想的解决方案,而且我很难找到一个使用特征的好解决方案.这在PHP 5.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;
但由于性状的限制,这是不可能的.有任何想法吗?
解决方法:
我最终使用了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;