php 中 對象的資料隔離?

來源:互聯網
上載者:User
在多人訪問某個 類 的時候,如果在代碼中顯性的寫死了 $i = new Class() ; 的話,那麼所有的人訪問的對象都是這個唯一的 $i 嗎?

回複內容:

在多人訪問某個 類 的時候,如果在代碼中顯性的寫死了 $i = new Class() ; 的話,那麼所有的人訪問的對象都是這個唯一的 $i 嗎?

題主可能對代碼是怎麼執行的還每太弄明白。
本質上你寫了一個class,它什麼都不是,僅僅是一堆變數和一系列函數的集合。只是語言底層幫你做了一些限制,讓這個集合裡面的變數或者函數只能通過className.xxx的方式來訪問和調用。
至於你的問題,你首先主要知道php的多進程的概念。你可以把php代碼看成一個食譜,食譜是什麼呢?食譜什麼都不是,它僅僅是一系列的步驟,讓看它的人跟著它的指示進行下一步。沒有廚師,食譜毫無意義。當使用者請求執行xxx.php,就相當於來了個廚師拿了xxx這個食譜然後按照食譜上寫的步驟開始烹飪。同時有多個對xxx.php的請求,相當於同時來了多個廚師,他們的共同點是:他們拿著同一份食譜,意味著他們之後會幹相同的事情。但是每個廚師都是獨立的,他們有他們自己的食材和鍋,所以是互不影響的。
題主可能想問的是單例模式,我繼續用上面的例子來講。對於某個廚師,他在按照食譜進行烹飪的時候,其中可能會需要多次放一勺70%鹽+20%孜然+10%味精的混合物。那麼對於這樣可能會反覆用到的對象,他可以提前做一罐放在那兒,之後要用就不需要每次去按比例混合,直接從罐子裡取一勺就好了。這就是單例。
那麼你可能還有疑問,我電腦只有一個CPU進行運算,我同時多個請求來了怎麼辦?很簡單,輪流使用唄。這個答案可能比較讓人驚訝,但事實就是如此。就好比說有100個人要寫作文,但是只有一張紙,怎麼辦呢?那隻能每個人寫兩句然後下一個人寫,等大家都寫完了,又輪到第一個人寫。這看起來簡直就沒辦法寫下去了嘛!但是想象一下,如果速度非常非常快,你寫了一個字後你的紙被拿走給別人寫,但是0.0000001秒之後大家都寫完了,紙又回到了你的手上,而且別人的字跡都被擦乾淨了,你寫的內容還在原來的位置。在這麼短的時間內切換,你完全感覺不到紙被拿走過,你會覺得是自己獨佔地使用這張紙。這就是作業系統的進程切換,PHP也是這個道理。

當然不同了, 每個使用者都有一個全新的執行個體$i。 因為每個使用者所在的進程同。
。。。

如果每個人都得到的是一份$i的copy而不是每個人都執行了$i=new Class的話,他們能回到同一個執行個體.反之,如果他們都通過$i=new Class的話.那肯定只能共用static.以上這些的假設都是php運行在單線程下.很明顯LZ0說的多個使用者一定會啟動多個php進程.

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.