我有一個自動加載器,在加載一個小型框架時初始化很多對象。對象保存爲靜態變量,但現在我遇到了一個問題。我有一個在自動加載器中實例化的文件,但稍後會用到類似異常處理程序的文件,在調用特殊情況時會照顧它。目的是這個類中的方法返回$ this這個類對象,但是當這樣做時,返回的值不是被調用對象的實例,而是被繼承到調用它的類中。此外,被調用的exception_handler不僅是它自己的一個實例,而且在整個自動加載器中都會實例化,並在所有內容都被加載時繼承$ this。混亂,但我已經建立了一個小例子:返回當前沒有繼承屬性的類對象
class a {
public $a_tmp = 'tmp';
}
class b extends a {
public $b_tmp = 'tmp';
public function getOnlyThisClass() {
return $this;
}
}
$b = new b();
$b->getOnlyThisClass();
這將返回:
object(b)#1 (2) {
["b_tmp"]=>
string(3) "tmp"
["a_tmp"]=>
string(3) "tmp"
}
,我需要它只返回調用的類時被稱爲特殊方法。我知道這可以用工廠模式解決,但是在這種情況下想避免它。
謝謝。
爲什麼不讓'$ a_tmp'私人? –
這是發生了什麼事情的一個小例子,使得$ a_tmp私有意味着我應該讓整個框架中的所有內容因爲一個類而變得私有。也許我錯了,但工廠模式更具吸引力。 :) –
我不知道我是否理解問題,如果你這樣做:new b()這將返回一個b的實例,繼承一些方法和屬性。但是當你調用getOnlyThisClass時,你需要b的實例而不使用inerthed方法和屬性? – FerCa