看板 PHP 關於我們 聯絡資訊
※ 引述《tas72732002 (蔥頭)》之銘言: : 請問一下各位大大, 在物件導向的架構下, : 使用靜態變數和全域變數有什麼差異嗎? : Ex : public static $user1 = ""; : global $user1; $user2 = ""; : 它們不都是會被配置一塊記憶體永久保存, 直到程式執行結束嗎? : 兩者有不同嗎? public static <== 表示定義開放成員的靜態 這是php的物件導向所有的做法。 宣告靜態跟未宣告所使用的方法是不同的 class demo{ public static function myFunc() { //要呼叫本體其他函式或靜態成員屬性只能用self } public function myFunc1() { //要呼叫本體其他函式或成員可以用$this //但是若要呼叫其他靜態函式和靜態成員還是只能用self } } 雖然說demo::myFunc()和demo->myFunc()都會有作用。 但既然是靜態呼叫,以使用demo::myFunc()為主 差異上來說,前者不需物件被實體化也能呼叫。 後者是必須實體化才能呼叫。 不過這當中還有的差異是一但你使用了靜態呼叫就不能在方法中 使用$this,如果需要對本體其他的屬性或是函式呼叫只能用self::funcName() 我自己比較多時候是在使用靜態呼叫生成各自獨體的物件時會看到。 再來就是global 這個東西叫做「全域變數」。 他跟php的無件導向一點關係也沒有。 而且在正常的情形下,也不怎麼會想去用到他。 因為一個沒弄好,你可能就會出現未可預期的結果。 一般而言如果你只是想在某個範疇內宣告一定範圍的全域 還是使用物件導向的屬性就好了。 一般而言如果是整個程式要用到的設定,那就用常數去定義。 以我自己來說,我不怎麼喜歡也不怎麼會想去用到global。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.204.164.199 ※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1434602867.A.CB6.html
tas72732002: 靜態變數感覺是執行程式就會預先載入(java的認知) 06/18 13:08
mmis1000: 對PHP而言,應該要跑到import那一句後才會載入? 06/18 17:45