據PHP,類::自我總是指向類本身,而是因爲我寫下了這些代碼,一些奇怪的事情發生了:'自我'如何在繼承類中工作?
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
這意味着自在父類中不完全繼承到孩子,它更像這個:
foo() {return parent::foo();}
這是從PHP的功能還是它的錯誤?或者是這樣的意思?
否則,我試圖告訴類創建自己的對象是發生了這樣的事情,代碼是這樣的:
class Models {
function find($exp) {
...
...
$temp_model = new self();
...
...
}
}
class Something extends Models {...}
$somethings = Something::find("...");
也許有人會問,「你爲什麼不設置一個變量值爲類,並將該變量用作__構造函數?「
像這樣:
...
...
function find($exp) {
...
...
$class_name = __class__;
$temp_model = new $class_name();
...
...
}
...
其實我這樣做,並得到了更怪異的結果:
只有上課的時候沒有任何屬性或功能,但find()
,或它的工作原理告訴我一個變量的錯誤表明一個函數存在的地方會跳出來。
謝謝你,我會盡力的工廠模式:) – 2012-04-12 21:14:50