2017-08-01 75 views
1

我了解到,静态优于因为自做后期静态绑定。

但我不知道这将是最好的参考常量变量。

class Black 
{ 
    const color = 'black'; 

    public function byThis() 
    { 
     return $this::color; 
    } 

    public function bySelf() 
    { 
     return self::color; 
    } 

    public function byStatic() 
    { 
     return static::color; 
    } 
} 

我检查了所有三个getters工作良好。哪个是最好的选择? (我使用PHP 7.0)

+0

的可能的复制[?何时使用自超过$这个(https://stackoverflow.com/questions/151969/when-to-use-self-over-this) –

+1

他们如果您创建一个重新定义该常量的子类,则不一样。 'byThis()'和'byStatic()'将返回子类的值。 – Barmar

回答

1

PHP class constants documentation建议使用self::作为班级中的常数。我个人会留在这。

关键字的每一个返回相同的值,即使类扩展与恒定的另一个值另一个类,除了parent::返回父类的值:

class White { 
    const color = "white"; 
} 

class Black extends White 
{ 
    const color = "black"; 

    public function byThis() 
    { 
     return $this::color; 
    } 

    public function bySelf() 
    { 
     return self::color; 
    } 

    public function byStatic() 
    { 
     return static::color; 
    } 

    public function byParent() { 
     return parent::color; 
    } 
} 

$black = new Black; 
echo "byThis: " . $black->byThis() . PHP_EOL; 
echo "bySelf: " . $black->bySelf() . PHP_EOL; 
echo "byStatic: " . $black->byStatic() . PHP_EOL; 
echo "byParent: " . $black->byParent() . PHP_EOL; 

输出将是:

byThis: black 
bySelf: black 
byStatic: black 
byParent: white 
相关问题