Как вывести константу, которая изменяется в классах ребенка и родителей?

У меня есть родительский класс, у которого определен постоянный идентификатор, но у меня есть 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.

2

Решение

Для 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
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector