我收到一个错误,我认为是因为我在重构中犯了一些错误,但我找不到关于绑定$this
时的文档,我的错误可以通过静态绑定来解释。
额外的积分(我实际上不能给你额外的积分)链接到关于php中这类事情的优秀文档。
[编辑]
我得到的错误告诉我,当我这样做时Subclass::$var
不存在,例如,超级类中的echo $this->var
。但是$var
存在于子类中。
答案 0 :(得分:1)
$this
变为可用。从逻辑上讲,您无法在$this
函数中使用static
。
除了在$this
函数中调用static
之外,还有很多时间可能出错,因为在PHP中根本没办法。
你得到的错误究竟是什么?代码也很有用。
答案 1 :(得分:0)
是的,$this
是动态绑定的,因为以下输出是“foo”的事实证明了这一点:
<?php
class Base
{
public function ecc(){
echo $this->subvar;
}
}
class Sub extends Base
{
public $subvar;
public function __construct(){
$this->subvar = 'foo';
$this->ecc();
}
}
new Sub();
?>
答案 2 :(得分:0)
这适用于PHP:
class A {
public function foo() {
echo $this->bar;
}
}
class B extends A {
public $bar = 1;
}
$b = new B;
$b->foo(); // 1
它的工作原理是因为PHP具有动态范围解析(即:范围在运行时解析而不是编译时)。但是,我建议反对它,因为它真的是一种语言的特殊性。第二,未能在子类中声明$bar
将导致错误。我认为一个班级应该只引用它所知道的成员。
相同的代码,比如C ++:
class A {
public:
void foo() {
std::cout << bar;
}
};
class B : public A {
public:
int bar;
B() {
bar = 1;
}
};
...会给你一个编译错误(在A :: foo()中:'bar'未在此范围内声明)。