<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ## 函數的傳值和傳引用 **所謂值傳遞** 就是說僅將對象的值傳遞給目標對象,就相當于copy;系統將為目標對象**重新開辟一個完全相同的內存空間**。 **所謂引用** 就是說將對象在內存中的地址傳遞給目標對象,就相當于使目標對象和原始對象對應**同一個內存存儲空間**。此時,如果對目標對象進行修改,內存中的數據也會改變。 **引用的作用** 如果程序比較大,引用同一個對象的變量比較多,并且希望用完該對象后手工清除它,個人建議用 "&" 方式,然后用$var=null的方式清除. 其它時候還是用php5的默認方式吧. 另外, php5中對于大數組的傳遞,建議用 "&" 方式, 畢竟節省內存空間使用。 **取消引用** 當你 `unset` 一個引用,只是斷開了變量名和變量內容之間的綁定。這并不意味著變量內容被銷毀了。 ```php $a = 1; $b = &$a; unset($a); echo $b; // 1 ``` > unset并沒有真正銷毀變量的作用,僅僅是切斷了變量與內存之間的關系,內存只要還被引用著就不會被釋放; $b和$a同時指向1,切斷其中$a的關系,$b還是指向1,所以上題不報錯,照樣輸出1。 > **注意:** 在PHP中對象的傳值默認是引用傳值 >[success] 變量方向理解 * **傳值:** 是把實參的值賦值給形參,那么對形參的修改,不會影響實參的值 * **傳地址:** 是傳值的一種特殊方式,只是他傳遞的是地址,不是普通的如int,那么傳地址以后,實參和形參都指向同一個對象 * **傳引用:** 真正的以地址的方式傳遞參數,傳遞以后,形參和實參都是同一個對象,只是他們名字不同而已,對形參的修改將影響實參的值 * 案例01 ```php // 傳值 $var01 = 1; $var02 = 2; $var02 = $var01; $var01 = 3; // 變量$var01和變量$var02是兩塊內存,互不影響 echo $var02; // 輸出 1 echo "\n"; // 傳地址 $var03 = 1; $var04 = 2; $var04 = &$var03; // 把變量 $var03的內存地址賦給變量$var04;此時的變量$var04和變量$var03全等; $var03 = 33; // 變量 $var03 和 $var04 是一處內存,改變其中一個,另外一個也被改變; echo $var04; // 輸出 33 ``` >[warning] 普通函數 * 傳值 是把實參的值賦值給形參,那么對形參的修改,不會影響實參的值 * 傳地址 是傳值的一種特殊方式,只是他傳遞的是地址,不是普通的如int,那么傳地址以后,實參和形參都指向同一個對象 * 傳引用 真正的以地址的方式傳遞參數,傳遞以后,形參和實參都是同一個對象,只是他們名字不同而已,對形參的修改將影響實參的值 * 案例02 ```php // 普通函數的傳值 $a = 10; function add($a) { $a = 20; echo $a . "\n"; // 20 } add($a); echo $a . "\n"; // 10 // 普通函數的引用傳值 // 調用方法 add_address,并將變量$a的引用傳給變量 $b,此時兩個地址指向同一內存,改變其中一個,另外一個也要被改變; function add_address(&$a) { echo $a . "\n"; // 10 $a = 20; echo $a . "\n"; // 20 return $a; } $b = add_address($a); echo $a . "\n"; // 20 echo $b . "\n"; // 20 ``` >[danger] 系統函數 * 傳值系統函數 `strtolower` 含義:將字符串轉化為小寫 語法:`string strtolower ( string $string )` //這里是傳遞值 ```php $str = "Tinywan"; $str2 = strtolower($str); var_dump($str, $str2); // Tinywan tinywan ``` * 傳地址系統函數 `array_pop` 含義:彈出數組最后一個單元(出棧) 語法:`mixed array_pop ( array &$array )` // 這里是傳地址 ```php $tmp_arr = [1,2,3,4]; var_dump($tmp_arr); // 彈出之前 array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) } array_pop($tmp_arr); var_dump($tmp_arr); // 彈出之后 array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } ``` >[success] 自定義函數 ```php // 去變量的值 function fun($param) { $param += 20; var_dump($param); // 30 } $tmp = 10; fun($tmp); // 30 var_dump($tmp); // 10 // 去變量的地址 function fun_add(&$param) { $param += 20; var_dump($param); // 30 } $tmp = 10; fun_add($tmp); // 30 var_dump($tmp); // 30 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看