What is the best way to define constants that may be used by a number of classes within a namespace? I'm trying to avoid too much inheritance, so extending base classes is not an ideal solution, and I'm struggling to find a good solution using traits. Is this in any way possible in PHP 5.4 or should a different approach be taken?
I have the following situation:
trait Base
{
// Generic functions
}
class A
{
use Base;
}
class B
{
use Base;
}
The problem is that it is not possible to define constants in PHP traits. Ideally, I would want something like the following:
trait Base
{
const SOME_CONST = 'someconst';
const SOME_OTHER_CONST = 'someotherconst';
// Generic functions
}
Then these could be accessed though the class that applies the trait:
echo A::SOME_CONST;
echo B::SOME_OTHER_CONST;
But due to the limitations of traits this isn't possible. Any ideas?
I ended up using user sectus's suggestion of interfaces as it feels like the least-problematic way of handling this. Using an interface to store constants rather than API contracts has a bad smell about it though so maybe this issue is more about OO design than trait implementation.
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;
}
Which allows for:
A::SOME_CONST;
B::SOME_CONST;