为什么在这种情况下
问题描述:
需要自我::范围我有一个简单的基类为什么在这种情况下
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();
}
}
为了这个工作,我需要在my_class
指定parent::do_something()
。我明白这一点,这是有道理的。但是,这段代码会抛出一个错误。为了它的工作,我必须指定:
$result = self::helper_function();
对我来说这没有任何意义。因为它让我修改了基类,如果它没有被继承,它将自行工作。似乎与继承模式相矛盾。
也许我只是做错了。任何有识之士将不胜感激!
答
self::
前缀通常表示您正在调用父级静态方法。如果这个函数没有在同一个类中声明,但是在你继承该方法的类中,那么你应该使用parent::
。通常功能没有具体声明为static
不考虑静态。如果您正在调用常规方法,则应该使用$this->
。
静态和正常方法之间的主要区别在于:
- 静态方法即使不istanciating类被称为
- 和创建该类的对象后的正常方法必须被称为
使:
class foo {
public function normal() {}
public static function static() {}
}
foo::static(); // works
foo::normal() // don't work
$foo = new foo();
$foo->normal(); // works
参考:
答
,你可以这样做:
function __construct() {
echo $this->do_something();
}
$this
是指这一类和任何父
答
的公共或受保护的选项,您需要使用$this->helper_function()
。 这是班级的一种方法,因此您必须使用$this
来调用它。有了self::
,你可以静态调用它,除非函数声明为static
,否则不应该这样做。