為什麼在普通函數裡面定義一個變數和類別裡面定義一個屬性不一樣呢?在a()函數裡面 必須把變數定義在前面 如果把a()函數裡面的$a =1放到return後面就會報錯 為什麼在類別裡面卻不會報錯?雖然大手可能覺得很幼稚 但我搞不懂這個問題
<code>function a(){ return $a; $a=1; } echo(a()); ---------------------------------------------- class aa{ function bb(){ return $this->name; } public $name=4; } $a=new aa(); $b=$a->bb(); echo $b;</code>
為什麼在普通函數裡面定義一個變數和類別裡面定義一個屬性不一樣呢?在a()函數裡面 必須把變數定義在前面 如果把a()函數裡面的$a =1放到return後面就會報錯 為什麼在類別裡面卻不會報錯?雖然大手可能覺得很幼稚 但我搞不懂這個問題
<code>function a(){ return $a; $a=1; } echo(a()); ---------------------------------------------- class aa{ function bb(){ return $this->name; } public $name=4; } $a=new aa(); $b=$a->bb(); echo $b;</code>
因為類別是採用先編譯後執行,而面向過程則是流式執行。
一般多是如此,這是我從JS身上悟到的。
最初級的解釋就是$a=new aa();
此時屬性$name已經賦值了,但function bb()還沒執行。
事實上物件管理是很複雜的,簡單說,不管你怎麼寫,在運行的時候也已經被預處理了,所有屬性在實例化的時候先分配內存,然後才執行構造。