2017-03-06 50 views
2

我有一个父类,它有一个常量ID定义,但我有X个孩子具有相同的常数ID名称定义,具有不同的值。如何打印儿童和父母课程中发生变化的常量?

如何在父级的方法中显示常量的值,而不必覆盖每个孩子上的代码?

Idk如果我表达的权利,所以我告诉你我的意思的例子。

这是我的父类的简单例子(存在缺失的用途,命名空间,等等。但你会明白我的意思):

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 /检查-ID/40”,称与“静:: ID_SKI”的常量,它会回到我40了,如果我更改为40 20,它也会让我回到40。但是,如果我输入'local.blablabla/check-id/40',用'self :: ID_SKI'调用const,它会返回我20,如果我改变20为20,显然,我会返回20。

我有一个以上的孩子,它只从一个孩子返回一个静态值,它不会改变。

我想你明白我的意思了..你能帮我吗?

谢谢;)。

更新:

我的坏,我使用的PHP版本是5.5.9。

+0

这个问题是缺少PHP的使用版本,它是非常重要的在这里。 – JustOnUnderMillions

+0

@JustOnUnderMillions新增了,我的坏,ty记住它给我^^。 – LastFit

回答

0

对于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

我更新了我使用的PHP版本。 – LastFit

+0

@LastFit更新到5.6之前的PHP版本 – JustOnUnderMillions

+0

问题是,我不能通过它们的名称调用子类,它必须是dinamically的,如:$ name ='B',做一个if,并且那么像$ name :: getSelf这样的东西会返回一个错误。 – LastFit