【发布时间】:2018-12-24 03:03:37
【问题描述】:
根据 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();
我以为输出会是:
foo() from C_foo
foo() from C_bar
但事实上:
foo() from C_foo
foo() from C_foo
这意味着父类中的 self 并没有完全继承到子类中,它更像这样:
foo() {return parent::foo();}
这是 php 的一个特性还是一个错误?还是这样的意思?
否则,当我试图告诉一个类从自己创建对象时,就会发生这种情况,代码是这样的:
class Models {
function find($exp) {
...
...
$temp_model = new self();
...
...
}
}
class Something extends Models {...}
$somethings = Something::find("...");
也许有人会问,“你为什么不设置一个值为class的变量,并将该变量用作__构造函数?”
像这样:
...
...
function find($exp) {
...
...
$class_name = __class__;
$temp_model = new $class_name();
...
...
}
...
事实上我是这样做的,结果更奇怪:
它仅在类没有任何属性或函数但find() 时才有效,或者告诉我一个变量显示一个函数存在的位置的错误会跳出。
【问题讨论】:
标签: php inheritance