<td draggable='ba5e2m2'></td>

    <small date-time='dga871yw'><acronym dir='v6ehc45'></acronym></small>
        1. <ol dropzone='g6egng8'></ol>

              <ul dir='frx9of5'></ul>

              文章熱詞:php,傳值

              日期:2019-10-30 08:50 by Mr. Yang 1955 0 收藏
              我要分享

              摘要: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的值)的情況下,$b的值不受影響。$a與$b的内存關系圖如下:

              640_wps圖片.jpg

              而代碼 $p->name = 'jesse';将數據類型賦值給$p變量,通過$p修改對象内部的值成功,對比變量的傳值方式,證明這是引用傳值,内存關系圖如下:

              640_wps圖片.jpg

              <?php 
                  class Person
                  {
                      public $name;
                      public $age;
                      // 将對象類型的數據 賦值 給一個變量
                      $p = new Person;
                      // 通過對屬性修改值,來确定面向對象中 對象的傳值方式
                      $p->name = 'jesse';
                      // 将對象賦予另一變量
                      $m = $p;
                      // 另一變量修改屬性值
                      $m->name = 'Marry';
                      // 輸出源變量 賦值變量訪問内部屬性的結果
                      echo $p->name, $m->name;
                  }
              ?>

              $m = $p;代碼爲本篇文章的最“點睛”的代碼,等号右邊爲是一個對象,左邊是一個變量,那麽犀利的問題來了,$m是将對象拷貝一份?還是按引用傳遞呢?該代碼内存關系如下:

              640_wps圖片.jpg

              所以,最後兩個對象的屬性值均被修改爲Marry!!!

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

              <?php 
                  class Person
                  {
                      public $name; 
                      public $age; 
                  } 
                  // 将對象類型的數據 賦值 給一個變量 
                  $p = new Person; 
                  // 通過對屬性修改值,來确定面向對象中 對象的傳值方式
                  $p->name = 'jesse';
                  // 将對象賦予另一變量
                  $m = &$p;
                  // 另一變量修改屬性值
                  $m->name = 'Marry';
                  // 輸出源變量 賦值變量訪問内部屬性的結果
                  echo $p->name, $m->name;
              ?>

              640_wps圖片.jpg

              上一篇:PHP&Redis實現排行榜實時更新

              下一篇:PHP實現用戶異地登錄提醒功能的方法


              評論