### 內存分配
成員變量在堆內存里.局部變量在棧內存里(基礎類型).如果是對象,那么變量在棧里.存儲的數據在堆里.
### 疑惑
既然成員變量存在于對象中,對象存在于堆中,所以成員變量存在于堆中。那么按照這樣的推理,局部變量存在于方法中,而方法存在于對象中,對象存在于堆中,那是不是可以說局部變量存在于堆中?
### 理解
當對象new出來,實體存在于堆,對象的成員變量已經在堆上分配空間,但對象里面的方法是沒有出現的,只出現方法的聲明,方法里面的局部變量并沒有創建。等到對象調用此方法時,為了加快運行的速度,方法中的局部變量才會在棧中創建,所以,方法中的局部變量是在棧內的。
當然需要注意的是類變量(靜態變量)存在于方法區!!引用類型的局部變量聲明在棧,存儲在堆
.
內存:棧 1.存放局部變量 2.不可以被多個線程共享 3.空間連續,速度快
堆 1.存放對象 2.可以被多個線程共享 3.空間不連續,速度慢,但是靈活?
方法區 1.存放類的信息:代碼、靜態變量、字符串常量等等 2.可以被多個線程共享 3.空間不連續,速度慢,但是靈活
總的來說:我們先來記住兩條黃金法則:
1.引用類型總是被分配到“堆”上。不論是成員變量還是局部
2.基礎類型總是分配到它聲明的地方:成員變量在堆內存里,局部變量在棧內存里。
- PHP加密技術
- md5加密
- Crypt加密
- 函數
- 概述
- 強類型參數
- 可變參數列表
- 值傳遞&引用傳遞
- 變量作用域
- 可變函數
- 嵌套函數
- 遞歸函數
- 匿名函數(閉包)
- 面向對象
- 概念
- 類
- 對象的傳值
- 對象的克隆
- 構造方法
- 析構方法
- 克隆方法
- $this
- 類常量
- 靜態屬性
- 靜態方法
- 繼承
- 重寫
- 重載
- 概述
- 屬性重載
- 概述
- __set()
- __get()
- __unset()
- __isset()
- 方法重載
- 概述
- __call()
- __callstatic()
- 封裝
- 最終類
- 抽象類
- 接口
- 對象的序列化與反序列化
- __sleep()
- __wakeup()
- 其他魔術方法
- 對象的遍歷
- 類和對象相關函數
- 錯誤
- 概述
- 設置錯誤級別
- trigger_error()觸發錯誤
- 處理PHP中的錯誤
- 異常
- 概述
- 自定義異常類
- 自定義文件寫入異常類
- 記錄和發送異常信息
- 使用觀察者模式處理異常信息
- 自定義異常處理器
- 設計模式
- 創建型
- 單例模式
- 工廠模式
- 原型模式
- 結構型
- 注冊樹模式
- 適配器模式
- 數據映射模式
- 裝飾器模式
- 代理模式
- 行為型
- 策略模式
- 觀察者模式
- 迭代器模式
- 網絡
- cURL
- Oauth2.0
- QQ第三方登錄
- TCP/IP協議
- 概述
- HTTP協議
- 概述
- HTTP請求協議
- HTTP響應協議
- WebSocket
- 安裝擴展
- Redis
- Socket
- 計算機通信
- socket簡介
- PHP操作socket
- TCP
- HTTP服務端
- WebSocket
- PHP7
- 生成器yield
- 異常finally
- CGI和FPM
- php有用命令
- 內存