PHP中的$这是动态绑定的,对吧?

时间:2011-05-29 00:03:55

标签: php dynamic static this

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

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

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

3 个答案:

答案 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'未在此范围内声明)。