考慮下面的代碼,請:爲什麼未初始化的屬性在課堂上公開?
class foo {
function bar() {
$this->baz = 'hello there!';
}
}
$f = new foo;
$f->bar();
echo $f->baz; // hello there!
爲什麼上面的代碼工作的?我的意思是我沒有初始化$baz
變量,也沒有使用__get
和__set
魔術方法。我期待它會給我錯誤,但它似乎$baz
已被創建和分配public
知名度。 (順便說一下,它確實在靜態上下文中有錯誤)
__get&__set僅當從可見性範圍之外訪問屬性時纔會調用魔術方法。當你在課堂上分配baz時,他們不會被調用。看看http://stackoverflow.com/questions/18126801/quirky-set-magic-function –
因爲PHP的設計者選擇它來創建新的屬性,如果你分配給不存在的屬性;以同樣的方式分配一個值創建一個新的局部變量,如果它尚不存在...並使其它任何東西默認情況下將不太有用 –