У меня есть родительский класс, у которого определен постоянный идентификатор, но у меня есть X потомков с одинаковым именем идентификатора константы, с другим значением.
Как я могу показать значение константы в методе родителя без необходимости перезаписывать код для каждого дочернего элемента?
ИДК, если я правильно выражаюсь, я покажу вам пример того, что я имею в виду.
Это краткий пример моего родительского класса (здесь отсутствует использование, пространство имен и т. Д., Но вы поймете, что я имею в виду):
class RootLenSkiStatus extends AbstractSkiStatus
{
const ID_SKI = 20;
protected function getSnowType()
{
$snowtype = 'X';
switch ($snowType) {
case 'X':
$snowType = SnowType::SNOW_TYPE_X;
break;
default:
throw new \Exception('Method getSnowType from ID_SKI ' . static::ID_SKI . ' returns new Snowtype, not defined: ' . $snowType);
break;
}
$this->dto->setSnowType($snowType);
}
}
И есть короткий пример одного из моих дочерних классов:
class RootmadnessSkiStatus extends RootLenSkiStatus
{
const ID_SKI = 40;
}
Если я войду в «local.blablabla / check-id / 40», вызывая const с «static :: ID_SKI», он вернет мне 40, а если я поменяю 40 на 20, он тоже вернет мне 40 ,
Но если я введу local.blablabla / check-id / 40 и вызову const с помощью self :: ID_SKI, он вернет мне 20, а если я поменяю 40 на 20, он вернет мне 20 очевидно.
У меня более 1 дочернего элемента, и он возвращает только одно статическое значение от одного дочернего элемента. Он не изменяется.
Я думаю, вы поймете, что я имею в виду .. вы можете мне помочь?
Спасибо ;).
Обновить:
Плохо, версия PHP, которую я использую, — 5.5.9.
Для PHP> = 5.0
<?php
class A {
const FIRST = 20;
static function getSelf(){
echo self::FIRST;
}
static function getStatic(){
echo static::FIRST;
}
}
class B extends A {
const FIRST = 40;
static function getParent(){
echo parent::FIRST;
}
}
echo A::FIRST;//20
echo A::getSelf();//20
echo A::getStatic();//20
echo B::FIRST;//40 - so use classname out of child if you want the child value
echo B::getSelf();//20
echo B::getStatic();//40 - so use static in child if you want the child value
echo B::getParent();//20
Других решений пока нет …