Работая с константами, я всегда пытался определить константы, подобные приведенным ниже, которые позволяют конечным пользователям переопределять свои значения.
if ( ! defined( 'MY_CONST' ) )
define ( 'MY_CONST', 10 );
Теперь я начал работать с классами (ООП) и хотел бы знать, есть ли способ определить константу класса, которая позволит конечным пользователям переопределять значение?
Refs:
Если ваши пользователи расширяют ваш класс, они могут просто переопределить константу:
class Foo extends Bar {
const BAZ = 42;
}
Неважно, Bar
уже определяет BAZ
постоянный или нет. Все, что вам нужно сделать в вашем коде, это убедиться, что вы ссылаетесь на константу «current classes», используя позднюю статическую привязку:
public function useConst() {
echo static::BAZ;
}
В противном случае у вас есть возможность сделать это:
if (!defined('BAZ')) {
define('BAZ', 42);
}
class Bar {
const BAZ = BAZ;
}
Это не очень элегантно, хотя. Вы должны использовать геттеры и сеттеры в своем классе, чтобы разрешить настройку, а не использовать константы для этой цели:
Bar::setBaz(42);
Других решений пока нет …