1. 程式人生 > >php中物件,類與記憶體的關係

php中物件,類與記憶體的關係

記憶體分為4個部分

資料段,棧段,程式碼段,堆段。

棧是先進後出,而且分配的記憶體很少,但是速度很快,通常用於儲存一些標量,例如(int,string,boolean)因為這些已經知道他的記憶體大小,所以可以直接放到棧中。而物件,陣列等一些不知道大小的變數,那麼就會存放到堆記憶體中。

所以當我們建立陣列跟物件的時候,同時也會產生一個引用,這個引用是已知大小的,所以就放在棧記憶體中,而實際的內容就會放在堆記憶體中。這就是為什麼陣列跟物件是引用變數。

<?php
class Person
{
	public $name;
	public $age;
	public $knows;
	//建構函式,當類被例項化時,會自動執行
	public function __construct()
	{
		//例項化方式 $變數名 =  new 類名();
		//其中$變數名就是這個類的引用,變數名當要儲存的時候
		//被改變成pc認知的名字即記憶體地址來儲存在棧記憶體中
		echo "這裡被執行了";
	}
}
$p1 = new Person();
?>



其中__construct就是這個類的建構函式,當這個類被例項化的時候,這個函式就會自動執行。而當一個類的引用斷了的時候,這個在記憶體在就被當做垃圾,php就會執行垃圾回收機制,將這個類回收掉


而當類將要被回收的時候,還會執行一個魔術函式,這個函式是__destruct

<?php
class Person
{
	public $name;
	public $age;
	public $knows;
	//建構函式,當類被例項化時,會自動執行
	public function __construct($name)
	{
		//例項化方式 $變數名 =  new 類名();
		//其中$變數名就是這個類的引用,變數名當要儲存的時候
		//被改變成pc認知的名字即記憶體地址來儲存在棧記憶體中
		$this -> name = $name;
		echo $this->name."這裡被執行了<br>";
	}
	public function __destruct()
	{
		echo $this->name."我被回收了<br>";
	}
}
$p1 = new Person("張三");
$p2 = new Person("李四");
/*輸出
張三這裡被執行了
李四這裡被執行了
李四我被回收了
張三我被回收了
*/
?>
在上面我們會發現,先被回收的是$p2而不是$p1;

這是因為$p1與$p2這兩個變數是儲存在棧記憶體中,所以當回收的時候,先進的$p1會變成後出所以才會有李四先被輸出,張三在後面

相關推薦

php物件記憶體關係

記憶體分為4個部分 資料段,棧段,程式碼段,堆段。 棧是先進後出,而且分配的記憶體很少,但是速度很快,通常用於儲存一些標量,例如(int,string,boolean)因為這些已經知道他的記憶體大小,所以可以直接放到棧中。而物件,陣列等一些不知道大小的變數,那麼就會存放到堆

java面向物件物件關係

1.java面向物件 面向物件是一種開發模式,但最早使用的開發模式是面向過程 面向過程:指的是針對某一個問題單獨提出解決方案以及程式碼開發 即是:面向過程的方法寫出來的程式是一份蛋炒飯 恰巧你不愛吃雞蛋,只愛吃青菜的話,那麼唯一的辦法就是全部倒掉,重新做一份青菜

PHP學習——28 PHP面向物件(抽象抽象方法、介面的實現)

一、抽象類與抽象方法 <?php // 任何一個類,如果它裡面至少有一個方法是被宣告為抽象的,那麼這個類就必須被宣告為抽象的。 abstract class Person // 定義為抽象的類不能被例項化。 { public $name; public function __co

C++ 物件的定義的作用域成員this指標

概要 這篇文章主要內容是關於類與物件,類的定義,類的作用域,類中成員,this指標。寫的比較粗,後期有時間再改。 什麼是類? 對於類,我認為最早的發言人還是亞里士多德。他歸納事物的方法就是這是什麼(屬性)、能幹什麼(方式)、 起個名字(物件名) 、歸類(抽象)

Java物件方法的記憶體分配

以下針對引用資料型別: 在記憶體中,類是靜態的概念,它存在於記憶體中的CodeSegment中。 當我們使用new關鍵字生成物件時,JVM根據類的程式碼,去堆記憶體中開闢一塊控制元件,存放該物件,該物件擁有一些屬性,擁有一些方法。但是同一個類的物件和物件之間

mysqlcharvarchartext型的區別和選用

數據庫服務器 填充 處理 sdn ext 支持 內容 總結 ace 關於char,varchar與text平時沒有太在意,一般來說,可能現在大家都是用varchar。但是當要存儲的內容比較大時,究竟是選擇varchar還是text呢?不知道。。。。。。 text 、 cha

php對象數組之間的轉換

from ech php json simple imp 對象 rom AD 1.剛看視頻學習的時候看到一個困擾很久的問題, 有時候我們在進行做項目的時候會碰到的一個小問題。舉一個小例子。 獲取一個xml文件裏面的數據。 xml.xml文件如下:

day17 面向物件03 之間的關係

類與類之間的關係依賴關係 在方法中給方法傳遞一個物件. 此時類與類之間的關係是最輕的關聯關係(組合, 聚合) def __init__(self, name, xxxList =None): self.xxxList = xxxList def __init__(self, n

day17關係

一,類與類之間的關係:   依賴關係:  在方法中給方法傳遞一個物件,此時類與類之間的關係是最輕的。   關聯關係(組合,聚合),通過屬性設定來維護兩個物件的關係 def __init__(): self.stuList = [] def __init__():

JAVA基礎之類和物件以及之間的關係

面向物件是當前軟體開發的主流設計規範,是一種程式語言模式。 面向物件主要包括面型物件分析,面型物件設計,面型物件程式設計。 面型物件分析就是以面向物件“類”的概念去認識問題,分析問題。 1.下面舉一個很簡單的例子,介紹如何建立一個類,以及如何建立類的物件,構造方法,自己定義的方法。

PHPCGIFastCGIPHP-CGIPHP-FPM對比

CGICGI全稱是“公共閘道器介面”(Common Gateway Interface),HTTP伺服器與你的或其它機器上的程式進行“交談”的一種工具,其程式須執行在網路伺服器上。CGI可以用任何一種語言編寫,只要這種語言具有標準輸入、輸出和環境變數。如php,

python 面向物件(三)之間的關係

###################總結################# 1. 依賴關係 執行某個動作的時候. 需要xxx來幫助你完成這個操作. 此時的關係是最輕的. 隨時可以更換另外一個東西來完成此操作 class Ren(): def play(self,toos):

讀《深入 PHP 面向物件、模式實踐》2單例模式

1,單例模式,138頁     問題:一個物件應該可以被系統中的任何物件使用。         這個物件不應該被儲存在會被覆寫的全域性變數中。         系統

resultMapjdbcType屬性javaTypejdbcType的對應關係

Java Type                                            JDBC Type         String                                                        CHAR String       

java面向物件物件區域性變數成員變數基本型別和引用型別作為引數傳遞)

一.類和物件的區別 類是對某一類事物的抽象描述,而物件用於表示現實中該類事物的個體 可以將玩具模型看作是一個類,將一個個玩具看作物件,從玩具模型和玩具之間的關係便可以看出類與物件之間的關係。類用於描述多個物件的共同特徵,它是物件的模板。物件用於描述現實中的個體,它是類的例項 二.區域性變數和成員變數

物件名.class名.this

轉自:http://blog.csdn.net/cto_51/article/details/8962357 1.當在內部類中使用this指的就是內部類的物件, 為了訪問外層類物件,就可以使用外層類名.this來訪問。 2. 在java中,每個class都有一個相

phpnew一個物件的兩種寫法

$obj = new $class_name($aff_id,$this); //1、php中,如果變數值是一個類名,可以直接new這個變數,即相當於new這個類$obj = new LinkFeed

Java的集合物件的判空

1.集合類Array、List、Map、Set的判空 a.List進行判空 //判斷關聯的積分項是否為空,若不為空,則插入資料庫 if(pointsItemList != null && !pointsItemList.isEmp

jsevalarguments異常處理的用法-基礎知識總結------彭記(017)

報錯 字符串 nts 字符 number 拖動 ron cnblogs 數組 eval的使用: <script> /*eval的作用: * 1.將字符串當成js代碼來執行 * 2.可以將json格式的字符串轉換為js對象*/

2017-9-23C#筆記(的索引事件運算符this訪問器派生分部類抽象封閉靜態結構的不同)

追溯 {} 矩形 bst 關鍵字 特定 類對象 direct 派生類的構造函數 1.類的索引 索引是一組get和set鋒訪問器,支持按照飲用數組元素的方法來引用對象.索引通常便是多個數據成員,並且它總是以雷類的事例成員的方式存在.聲明索引的方法: 返回類型 this