$this在php中是动态绑定的,对吗?

$this在php中是动态绑定的,对吗?,php,dynamic,static,this,Php,Dynamic,Static,This,我得到一个错误,我想是因为我在重构中犯了某种错误,但是我找不到关于何时绑定$this的文档,我的错误可以通过静态绑定来解释 额外的点(实际上我不能给你额外的点)链接到php中关于这类事情的优秀文档 [编辑] 我得到的错误是告诉我,子类::$var在超类中不存在,例如,echo$this->var。但是,$var存在于子类中。$this在调用构造函数后可用。从逻辑上讲,您不能在静态函数中使用$this 除了在静态函数中调用$this之外,不会有太多的时间错误,因为在PHP中根本没有办法 你到底犯了

我得到一个错误,我想是因为我在重构中犯了某种错误,但是我找不到关于何时绑定
$this
的文档,我的错误可以通过静态绑定来解释

额外的点(实际上我不能给你额外的点)链接到php中关于这类事情的优秀文档

[编辑]
我得到的错误是告诉我,
子类::$var
在超类中不存在,例如,
echo$this->var
。但是,
$var
存在于子类中。

$this
在调用构造函数后可用。从逻辑上讲,您不能在
静态
函数中使用
$this

除了在
静态
函数中调用
$this
之外,不会有太多的时间错误,因为在PHP中根本没有办法


你到底犯了什么错误?代码也很有用。

是的,$this是动态绑定的,下面的输出是“foo”这一事实就证明了这一点:


这在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类{
公众:
void foo(){

std::cout也许你应该详细说明错误,并显示你认为可能错误的代码。请提供更多详细信息。
$此
从构造函数开始到对象结束都在对象中可用。有什么问题吗?+1它从构造函数开始到对象销毁都可用。OP可能正在尝试g从静态方法调用
$this
,正如您所想。我在这里添加了一些细节,这不是
静态
问题。我在子类和超类中以各种方式使用它。您是对的,我真正想要的是基类(a)中的
抽象保护的$bar
当然,php只有抽象方法,没有属性,所以我不能“正确地”做到这一点,但注释几乎和编译器异常一样好。
class A {

public:
    void foo() {
        std::cout << bar;
    }

};

class B : public A {

public:
    int bar;
    B() {
        bar = 1;
    }

};