2017-02-19 21 views
2

当你继承类,在子类中设置一些常量和父类有需要使用它们的静态方法:在继承PHP类使用常量

class some_helperclass { 

    public static function add_them() { 

     return self::some_c + self::another_c; 
    } 

}  

class mainclass extends some_helperclass { 

    const some_c = 1; 
    const another_c = 2; 

} 

我得到一个错误,当我尝试执行此:

mainclass::add_them()

有没有办法得到这个工作?

+2

“错误” - 好,这是不是很具体。想告诉任何人,或者你自己谷歌? – mario

回答

3

这是late static binding工作原理的一个很好的例子。

我不会重写它的文档,但TL; DR是self是指执行代码的文字类。在你的例子中,它是mainclass,它定义了常量,但是some_helperclass读取它们,所以它不能使用self

如果您更改为使用static::CONST_NAMEwill work

此外 - 这是一个很好的做法,只命名大写常量。

代码示例:

<?php 

class some_helperclass { 

public static function add_them() { 

    return static::some_c + static::another_c; 
    } 

}  

class mainclass extends some_helperclass { 

    const some_c = 1; 
    const another_c = 2; 

} 

var_dump(mainclass::add_them()); 

输出:int(3)

+0

eval.in正在抛出(内部)服务器错误(我肯定他们的错误是他们的结局)。我编辑 –

+0

谢谢弗雷德 - 它有时会这样做:-) –

+0

太棒了!谢谢你们的帮助。 :) – zag2010