小编Zha*_*yce的帖子

"self"如何在继承的类中完全正常工作?

根据php,class :: self总是指向类本身,但是当我写下这些代码时,会发生一些奇怪的事情:

class C_foo{
    function foo() { return "foo() from C_foo"; }
    function bar() { echo self::foo(); }
}

class C_bar extends C_foo{
    function foo() { return "foo() from C_bar"; }
}

C_foo::bar();
C_bar::bar();
Run Code Online (Sandbox Code Playgroud)

我以为输出会是:

foo() from C_foo
foo() from C_bar
Run Code Online (Sandbox Code Playgroud)

但实际上:

foo() from C_foo
foo() from C_foo
Run Code Online (Sandbox Code Playgroud)

这意味着父类中的self并不完全继承到子级,它更像是这样:

foo() {return parent::foo();}
Run Code Online (Sandbox Code Playgroud)

这是PHP的一个功能还是一个bug?或者是这样的意思?

否则,当我试图告诉一个类从它自己创建对象时会发生这样的事情,代码是这样的:

class Models {
    function find($exp) {
        ...
        ...

        $temp_model = new self();
        ...
        ...
    }
}

class Something extends Models {...}

$somethings = …
Run Code Online (Sandbox Code Playgroud)

php inheritance

13
推荐指数
2
解决办法
4446
查看次数

标签 统计

inheritance ×1

php ×1