#### 1. 函數(shù)傳值和傳引用的區(qū)別 --- 傳值 : 默認(rèn)情況下, 函數(shù)參數(shù)通過(guò)值傳遞, 所以即使在函數(shù)內(nèi)部改變參數(shù)的值也不會(huì)改變函數(shù)外部的值 傳引用 : 就是在函數(shù)的參數(shù)前面添加 `&` 符號(hào), 表示函數(shù)參數(shù)必須為引用地址, 不能是一個(gè)具體的值, 在函數(shù)內(nèi)部對(duì)該參數(shù)所做操作會(huì)應(yīng)用函數(shù)外部的該變量 引用傳遞官方手冊(cè) : [https://www.php.net/manual/zh/language.references.pass.php](https://www.php.net/manual/zh/language.references.pass.php) #### 2. 傳值、傳引用舉例 --- 傳值的函數(shù) ``` $abc = 'Hello World'; echo $abc . '<br>'; //Hello World echo strtolower($abc) . '<br>'; //hello world echo $abc . '<br>'; //Hello World ``` 傳引用的函數(shù) ```php echo '<pre>'; $arr = [3, 1, 2]; var_dump($arr);//[3, 1, 2] sort($arr); var_dump($arr);//[1, 2, 3] ``` 錯(cuò)誤示例 以下用法將拋出異常 : `Cannot pass parameter 1 by reference`, 報(bào)錯(cuò)譯文: 第一個(gè)參數(shù)無(wú)法通過(guò)引用傳遞 ``` sort([3, 1, 2]); ``` #### 3. 引用傳遞沒(méi)有定義的變量 --- **使用示例** ```php $where = ['id' => 1, 'name' => '張三'];//查詢條件 $where = where_filter($where, $fields);//構(gòu)建搜索器參數(shù) $data = User::withSearch($fields, $where)->select(); ``` **自定義函數(shù), 用于TP6搜索器** ```php /** * 去掉數(shù)組空字符串,返回所有鍵 * * @param array $where * @param array $keys * @return array */ function where_filter(array $where, &$keys) { // 去掉數(shù)組里的空值 (會(huì)正常返回:false、0) $where = array_filter($where, function ($k) { return ($k === '' || $k === null) ? false : true; }); // 拿到所有鍵 $keys = array_keys($where); // 返回?cái)?shù)組 return $where; } ```