根据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)