PHP物件導向(OOP)之如何實例化物件?
物件導向程式的單位就是對象,但物件又是透過類別的實例化出來的,既然我們類別會宣告了,下一步就是實例化物件了。下面我們就來跟大家介紹如何實例化物件。
當定義好類別後,我們使用new關鍵字來產生一個物件。
$物件名稱= new 類別名稱();
<?php class Person { //下面是人的成员属性 var $name; //人的名字 var $sex; //人的性别 var $age; //人的年龄 //下面是人的成员方法 function say() { //这个人可以说话的方法 echo "这个人在说话"; } function run() { //这个人可以走路的方法 echo "这个人在走路"; } } $p1=new Person(); $p2=new Person(); $p3=new Person(); ?>
$p1=new Person();
這條程式碼就是透過類別產生實例物件的過程,$p1就是我們實例出來的物件名稱, 同理,$p2, $p3也是我們實例出來的物件名稱,一個類別可以實例出多個對象,每個對像都是獨立的,上面的代碼相當於實例出來3個人來, 每個人之間是沒有聯繫的, 只能說明他們都是人類, 每個人都有自己的姓名, 性別和年齡的屬性,每個人都有說話和走路的方法,只要是類別裡面體現出來的成員屬性和成員方法,實例化出來的物件裡面就包含了這些屬性和方法。
物件在PHP裡面和整型、浮點型一樣,也是一種資料類,都是儲存不同類型資料用的,在運行的時候都要載入到記憶體中去用, 那麼物件在記憶體裡面是怎麼體現的呢?
記憶體從羅輯上說大致上是分成4段, 堆疊空間段, 堆疊空間段,程式碼段, 初使化靜態段,
①.堆疊空間段
#堆疊的特徵是空間小但被CPU存取的速度快,是用戶存放程式中暫時建立的變數。由於棧的後進先出特點,所以棧特別方便用來保存和恢復呼叫現場。從這個意義上講,我們可以把堆疊看成一個暫時資料寄存、交換的記憶體區。用於儲存佔用空間長度不變且佔用空間小的資料類型的記憶體段,例如整數1、100、10000等在記憶體中佔用空間是等長的,佔用空間都是32位元的4個位元組。還有double、boolean等都可以儲存在堆疊空間段中。
②.堆空間段
堆是用來存放進程運行中被動態分配的記憶體段,它大小並不固定,可動態擴張或縮減。用於儲存資料長度可變或佔用記憶體比較大的資料。例如,字串、陣列和物件就儲存在這段記憶體中。
③.資料段
資料段用來存放可執行檔中初始化全域變量,換句話說就是存放程式靜態分配的變數。
④.程式碼段
程式碼段是用來存放可執行檔的操作指令,也就是說它是可執行程式在記憶體中的鏡像。程式碼段需要防止在運行時被非法修改,所以只準許讀取操作,而不允許寫入(修改)操作。例如程式中的函數就儲存在這段記憶體中。
物件類型的資料就是一種佔用空間比較大的資料類型,並且是佔用的空間不定長的資料類型,所以物件建立完成以後被存放在對記憶體中,但物件的參考還是存放在棧裡面的。程式在運行時,佔內存中的資料是可以直接訪問的,而堆內存是不可以直接訪問的內存,但可以通過對象的引用名稱訪問對像中的成員。
程式裡面不同的宣告放在不同的記憶體段裡面,
堆疊空間段是儲存佔用相同空間長度並且佔用空間小的資料型態的地方,比如說整型1, 10, 100, 1000, 10000, 100000等等,在記憶體裡面佔用空間是等長的,都是64位元4個位元組。
那麼資料長度不定長,而且佔有空間很大的資料型別的資料放在那個記憶體的那個段裡面呢?這樣的資料是放在堆記憶體裡面的。
堆疊記憶體是可以直接存取的,而堆疊記憶體是不 可以直接存取的記憶體。
對我們的物件來說就是一種大的資料型別而且是佔用空間不定長的型,所以說物件是放在堆疊裡面的,但物件名稱是放在堆疊裡面的,這樣透過物件名稱就可以使用物件了。
$p1=new Person();
對於這個條碼, $p1是物件名稱在堆疊記憶體裡面,new Person()是真正的物件是在堆疊內存裡面的,具體的請看下圖:
从上图可以看出$p1=new Person();等号右边是真正的对象实例, 在堆内存里面的实体,上图一共有3次new Person(),所以会在堆里面开辟3个空间,产生3个实例对象,每个对象之间都是相互独立的,使用自己的空间,在PHP里面,只要有一个new这个关键字出现就会实例化出来一个对象,在堆里面开辟一块自己的空间。
每个在堆里面的实例对象是存储属性的,比如说,现在堆里面的实例对象里面都存有姓名、性别和年龄。每个属性又都有一个地址。
$p1=new Person();等号的左边$p1是一个引用变量,通过赋值运算符“=”把对象的首地址赋给“$p1“这个引用变量, 所以$p1是存储对象首地址的变量,$p1放在栈内存里边,$p1相当于一个指针指向堆里面的对象, 所以我们可以通过$p1这个引用变量来操作对象, 通常我们也称对象引用为对象。
验证:
class Person{ public $name; } $obj1 = new Person(); $obj1->name = "test1"; echo $obj1->name; $obj2 = $obj1; $obj2->name = "test2"; echo $obj1->name; echo $obj2->name;
通过测试结果来看,解释是对的。
$p1 是对象的指针而不是对象本身, obj2和 obj1都指向同一块内存,同一个对象。这一点和OOP语言是一样
object(Person)[2] public 'name' => string 'test2' (length=5)
object(Person)[2] public 'name' => string 'test2' (length=5)
可见对象的ID号是一个
如果想得到一个对象的副本,用$obj2 =clone $obj1; 用了clone后会产生一个新对象,分配内存,独立于原来的obj1
参见手册此页 http://www.php.net/manual/zh/language.oop5.cloning.php
$obj2 = $obj1; $obj2 = &$obj1;
一样的效果,一样的解释?
对于object来说,是一样的。 对于普通的变量是不一样的。
$a = 1; $b = $a; $c = &$a;
不一样的
以上是PHP物件導向(OOP)之如何實例化物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

深入解讀PHP物件導向的封裝性封裝是物件導向程式設計的三大特徵之一,它是指將資料和對資料的操作封裝在一個類別中,對外部程式隱藏具體的實作細節,提供對外的介面。在PHP中,透過使用存取修飾符(public、protected、private)來控制屬性和方法的可存取性,實現封裝的概念。首先,我們來了解一下存取修飾符的作用:public(公開的):公開的屬性和方法可以

如何透過PHP物件導向簡單工廠模式實現物件的版本控制和管理在開發大型的、複雜的PHP專案時,版本控制和管理是非常重要的一環。透過適當的設計模式,我們可以更好地管理和控制物件的創建和使用,從而提高程式碼的可維護性和擴展性。本文將介紹如何使用PHP物件導向簡單工廠模式來實現物件的版本控制與管理。簡單工廠模式是一種創建類別的設計模式,它透過一個工廠類別來實例化指定的對象

如何透過PHP物件導向簡單工廠模式實現物件的無縫切換與取代簡介:在PHP開發中,物件導向程式設計(Object-orientedProgramming,簡稱OOP)是一種十分常見的程式設計範式。而物件導向的設計模式可以進一步提高程式碼的可維護性和可擴充性。本文將重點介紹PHP中的簡單工廠模式,以實現物件的無縫切換和替換。什麼是簡單工廠模式?簡單工廠模式(Simple

如何使用PHP物件導向簡單工廠模式建立靈活的物件實例簡單工廠模式是一種常見的設計模式,它可以在不暴露物件建立邏輯的情況下建立物件實例。這種模式可以提高程式碼的靈活性和可維護性,特別適用於需要根據輸入條件動態建立不同物件的場景。在PHP中,我們可以利用物件導向程式設計的特性來實現簡單工廠模式。下面我們來看一個例子,假設我們需要建立一個圖形計算器,能夠根據使用者輸入的形

理解PHP物件導向的繼承機制繼承是物件導向程式設計中一個重要的概念,它允許創建新的類,其中包括舊類別的特性和功能。在PHP中,繼承可以透過關鍵字extends實現。透過繼承,子類別可以繼承父類別的屬性和方法,並且可以新增新的屬性和方法,或重寫繼承的方法。讓我們透過一個範例來理解PHP物件導向的繼承機制。 classAnimal{public$name

隨著網路的發展,PHP逐漸成為Web開發中最受歡迎的程式語言之一。然而,跟隨PHP的快速發展,物件導向程式設計已成為PHP開發中必備的技能之一。在本文中,我們將討論如何在PHP開發中掌握物件導向程式設計技巧。理解物件導向程式設計的概念物件導向程式設計是一種程式設計範式,它透過使用物件(類別、屬性和方法)來組織程式碼和資料。在物件導向程式設計中,程式碼被組織成可重複使用的模組,從而提高程式的

隨著網路科技的不斷發展,PHP成為了我們常見的網站開發語言之一,PHP物件導向程式設計也成為了一個不得不學習的知識點。物件導向程式設計(OOP)是一種程式設計範式,其核心概念是將資料與行為組合成一個對象,以提高程式碼的可重用性、可讀性和可維護性。本文將探討如何使用PHP實現物件導向程式設計並提高程式碼的可讀性和可維護性。物件導向程式設計的基本概念在物件導向程式設計中,每個物件都有一組屬

PHP語言因其易學易用而成為了一種非常流行的Web開發語言。物件導向程式設計是PHP語言中最重要的程式設計範式之一。但是,物件導向程式設計並不是容易掌握的東西,因此經常會出現一些常見的問題。在本篇文章中,我們將對PHP物件導向程式設計的常見問題進行詳細解析。問題一:如何建立物件?在PHP中,可以使用new關鍵字來建立一個物件。例如:classMyClass{/
