我得到一個錯誤,我認爲是因爲我在重構中犯了某種錯誤,但我無法找到關於何時綁定$this
的文檔,並且我的錯誤可以通過綁定來解釋靜態。
加分(我實際上無法給你加分)鏈接到有關這種事情在php中的優秀文檔。
[編輯] 我得到的錯誤是告訴我,Subclass::$var
在我做的時候不存在,例如,在超類中echo $this->var
。儘管如此,$var
存在於子類中。
我得到一個錯誤,我認爲是因爲我在重構中犯了某種錯誤,但我無法找到關於何時綁定$this
的文檔,並且我的錯誤可以通過綁定來解釋靜態。
加分(我實際上無法給你加分)鏈接到有關這種事情在php中的優秀文檔。
[編輯] 我得到的錯誤是告訴我,Subclass::$var
在我做的時候不存在,例如,在超類中echo $this->var
。儘管如此,$var
存在於子類中。
此作品在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的(): '棒' 在此範圍未聲明)。
爲了清楚起見,你說得對,我想要的是基類(A)中的'abstract protected $ bar'。當然,php只有抽象方法,而不是屬性,所以我不能真正做到「正確」,但評論幾乎和編譯器例外一樣。 – quodlibetor 2011-05-29 17:14:27
$this
在調用構造函數後變爲可用。邏輯上,您不能在static
函數中使用$this
。
除了在static
函數中調用$this
以外,沒有太多的東西可以出錯,因爲在PHP中根本沒有辦法。
你得到的錯誤究竟是什麼?代碼也會有用。
+1它可從構造函數的開頭直到對象的銷燬。正如你所想的,OP可能試圖從靜態方法調用'$ this'。 – Tadeck 2011-05-29 00:27:47
我添加了一些細節,這裏不是一個「靜態」問題。我在子和超類中以各種方式使用它。 – quodlibetor 2011-05-29 00:32:48
是,$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();
?>
顯示您的代碼,請 – Ibu 2011-05-29 00:04:52
也許您應該詳細說明錯誤並顯示您認爲可能錯誤的代碼。 – GolezTrol 2011-05-29 00:06:18
請詳細說明。 '$ this'在構造器開始的對象中可用,直到結束。問題是什麼? – Tadeck 2011-05-29 00:25:40