1. 程式人生 > 程式設計 >php的物件傳值與引用傳值程式碼例項講解

php的物件傳值與引用傳值程式碼例項講解

變數賦值與物件賦值對比

<?php 
  // 宣告一個變數並賦值 
  $a = 1; 
  // 將資料型別的值 賦值 給一個變數 
  $b = $a; 

  // 修改$a的值 
  $a = 2; 

  // $a和$b是兩個獨立的記憶體空間修改其中一個另一個不受影響
  echo $b; // 1 

  class Person{
    public $name;
    public $age;

  }

  // 將物件型別的資料 賦值 給一個變數
  $p = new Person;

  // 通過對屬性修改值,來確定面向物件中 物件的傳值方式
  $p->name = 'jesse';

  // 若是成功修改值,則是引用傳值 
  echo $p->name; // jesse

?>

案例解釋:

在這裡通過變數的賦值方式與物件的賦值方式方式相對比,程式碼中 $b = a ; 的 賦 值 方 式 為 “ 拷 貝 賦 值 ” , 故 在 修 改 其 源 值 ( a; 的賦值方式為“拷貝賦值”,故在修改其源值( a;的賦值方式為“拷貝賦值”,故在修改其源值(a的值)的情況下, b 的 值 不 受 影 響 。 b的值不受影響。 b的值不受影響。a與$b的記憶體關係圖如下:


在這裡插入圖片描述

而程式碼 p − > n a m e = ′ j 程式設計客棧 e s s e ′ ; 將 數 據 類 型 賦 值 給 p->name = 'jesse';將資料型別賦值給 p−>name=′jesse′;將資料型別賦值給p變數,通過$p修改物件內部的值成功,對比變數的傳值方式,證明這是引用傳值,記憶體關係圖如下:

在這裡插入圖片描述

<?php 
  class Person
  {
    public $name;
    public $age;

    // 將物件型別的資料 賦值 給一個變數http://www.cppcns.com
    $p = new Person;

    http://www.cppcns.com// 通過對屬性修改值,來確定面向物件中 物件的傳值方式
    $p->name = 'jesse';

    // 將物件賦予另一變數
    $m = $p;

    // 另一變數修改屬性值
    $m->name = 'Marry';

    // 輸出源變數 賦值變數訪問內部屬性的結果
    echo $p->name,$m->name;
  }

?>

$m = p ; 代 碼 為 本 篇 文 章 的 最 “ 點 睛 ” 的 代 碼 , 等 號 右 邊 為 是 程式設計客棧 一 個 對 象 , 左 邊 是 一 個 變 量 , 那 麼 犀 利 的 問 題 來 了 , p;程式碼為本篇文章的最“點睛”的程式碼,等號右邊為是一個物件,左邊是一個變數,那麼犀利的問題來了, p;程式碼為本篇文章的最“點睛”的程式碼,等號右邊為是一個物件,左邊是一個變數,那麼犀利的問題來了,m是將物件拷貝一份?還是按引用傳遞呢?該程式碼記憶體關係如下:


在這裡插入圖片描述

所以,最後兩個物件的屬性值均被修改為Marry!!!

那按引用傳值會是怎麼個情況?

<?php 
  class Person
  {
    public $name; 
    public $age; 
  } 

  // 將物件型別的資料 賦值 給一個變數 
oOUmwnrVZE  $p = new Person; 

  // 通過對屬性修改值,來確定面向物件中 物件的傳值方式
  $p->name = 'jesse';

  // 將物件賦予另一變數
  $m = &$p;

  // 另一變數修改屬性值
  $m->name = 'Marry';

  // 輸出源變數 賦值變數訪問內部屬性的結果
  echo $p->name,$m->name;

?>

在這裡插入圖片描述

到此這篇關於php的物件傳值與引用傳值程式碼例項講解的文章就介紹到這了,更多相關php的物件傳值與引用傳值內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!