$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;
}
};