我有一个简单的基类
class base {
function do_something() {
$result = helper_function();
return $result;
}
private function helper_function() {
return 10;
}
}
然后我有一个继承自它的主类。
class my_class extends base {
function __construct() {
echo parent::do_something();
}
}
为了实现这一点,我需要在parent::do_something()
中指定my_class
。我明白了,这很有道理。但是,此代码将引发错误。为了使它工作,我必须指定:
$result = self::helper_function();
对我来说,这没有任何意义。因为它让我修改了基类,如果它没有被继承,它将自己工作。似乎与继承模型相矛盾。
也许我只是做错了。任何见解都将不胜感激!
答案 0 :(得分:4)
self::
前缀通常表示您正在调用父静态方法。如果此函数未在同一个类中声明,但在您继承该方法的类中声明,则应使用parent::
。通常未声明为static
的特定函数不考虑静态。如果您正在调用普通方法,则应使用$this->
代替。
静态和普通方法的主要区别在于:
这样:
class foo {
public function normal() {}
public static function static() {}
}
foo::static(); // works
foo::normal() // don't work
$foo = new foo();
$foo->normal(); // works
参考文献:
答案 1 :(得分:3)
您需要使用$this->helper_function()
。
这是该类的一种方法,因此您必须使用$this
来调用它。 self::
使用static
静态调用它,除非将函数声明为{{1}},否则不应该这样做。
答案 2 :(得分:2)
你可以这样做:
function __construct() {
echo $this->do_something();
}
$this
指的是此类以及父