搜尋
首頁後端開發php教程PHP物件導向(OOP)之如何實例化物件?

物件導向程式的單位就是對象,但物件又是透過類別的實例化出來的,既然我們類別會宣告了,下一步就是實例化物件了。下面我們就來跟大家介紹如何實例化物件。

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()是真正的物件是在堆疊內存裡面的,具體的請看下圖:

PHP物件導向(OOP)之如何實例化物件?

#

从上图可以看出$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 &#39;name&#39; => string &#39;test2&#39; (length=5)
object(Person)[2]
public &#39;name&#39; => string &#39;test2&#39; (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中文網其他相關文章!

陳述
本文轉載於:cnblogs。如有侵權,請聯絡admin@php.cn刪除
PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?Apr 17, 2025 am 12:25 AM

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP如何處理對象克隆(克隆關鍵字)和__clone魔法方法?PHP如何處理對象克隆(克隆關鍵字)和__clone魔法方法?Apr 17, 2025 am 12:24 AM

PHP中使用clone關鍵字創建對象副本,並通過\_\_clone魔法方法定制克隆行為。 1.使用clone關鍵字進行淺拷貝,克隆對象的屬性但不克隆對象屬性內的對象。 2.通過\_\_clone方法可以深拷貝嵌套對象,避免淺拷貝問題。 3.注意避免克隆中的循環引用和性能問題,優化克隆操作以提高效率。

PHP與Python:用例和應用程序PHP與Python:用例和應用程序Apr 17, 2025 am 12:23 AM

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。

描述不同的HTTP緩存標頭(例如,Cache-Control,ETAG,最後修飾)。描述不同的HTTP緩存標頭(例如,Cache-Control,ETAG,最後修飾)。Apr 17, 2025 am 12:22 AM

HTTP緩存頭的關鍵玩家包括Cache-Control、ETag和Last-Modified。 1.Cache-Control用於控制緩存策略,示例:Cache-Control:max-age=3600,public。 2.ETag通過唯一標識符驗證資源變化,示例:ETag:"686897696a7c876b7e"。 3.Last-Modified指示資源最後修改時間,示例:Last-Modified:Wed,21Oct201507:28:00GMT。

說明PHP中的安全密碼散列(例如,password_hash,password_verify)。為什麼不使用MD5或SHA1?說明PHP中的安全密碼散列(例如,password_hash,password_verify)。為什麼不使用MD5或SHA1?Apr 17, 2025 am 12:06 AM

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP:服務器端腳本語言的簡介PHP:服務器端腳本語言的簡介Apr 16, 2025 am 12:18 AM

PHP是一種服務器端腳本語言,用於動態網頁開發和服務器端應用程序。 1.PHP是一種解釋型語言,無需編譯,適合快速開發。 2.PHP代碼嵌入HTML中,易於網頁開發。 3.PHP處理服務器端邏輯,生成HTML輸出,支持用戶交互和數據處理。 4.PHP可與數據庫交互,處理表單提交,執行服務器端任務。

PHP和網絡:探索其長期影響PHP和網絡:探索其長期影響Apr 16, 2025 am 12:17 AM

PHP在過去幾十年中塑造了網絡,並將繼續在Web開發中扮演重要角色。 1)PHP起源於1994年,因其易用性和與MySQL的無縫集成成為開發者首選。 2)其核心功能包括生成動態內容和與數據庫的集成,使得網站能夠實時更新和個性化展示。 3)PHP的廣泛應用和生態系統推動了其長期影響,但也面臨版本更新和安全性挑戰。 4)近年來的性能改進,如PHP7的發布,使其能與現代語言競爭。 5)未來,PHP需應對容器化、微服務等新挑戰,但其靈活性和活躍社區使其具備適應能力。

為什麼要使用PHP?解釋的優點和好處為什麼要使用PHP?解釋的優點和好處Apr 16, 2025 am 12:16 AM

PHP的核心優勢包括易於學習、強大的web開發支持、豐富的庫和框架、高性能和可擴展性、跨平台兼容性以及成本效益高。 1)易於學習和使用,適合初學者;2)與web服務器集成好,支持多種數據庫;3)擁有如Laravel等強大框架;4)通過優化可實現高性能;5)支持多種操作系統;6)開源,降低開發成本。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具