亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
博主信息
博文 16
粉絲 0
評論 0
訪問量 22099
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
函數(shù)的定義和調(diào)用,函數(shù)的參數(shù),函數(shù)的返回值,匿名函數(shù)(閉包)的申明和調(diào)用
剛哥哥
原創(chuàng)
1406人瀏覽過

概念總結(jié)

  1. 函數(shù): php中可分為php內(nèi)置函數(shù)和用戶自定義函數(shù),
  2. // 函數(shù)可以理解為 能夠?qū)崿F(xiàn)某個功能的代碼塊,時代碼重用的一個手段;函數(shù)在定義的時候不會執(zhí)行,在調(diào)用的時候才會執(zhí)行;
  3. // 函數(shù)的申明,通過 function 關(guān)鍵字開頭 ,函數(shù)名通過 下劃線'_' 字母開頭,函數(shù)名對大小寫不敏感;
  4. // 函數(shù)具有返回值,通過 return 返回,函數(shù)只有一個返回值,如果要返回多個值,可以返回 數(shù)組、對象(匿名類方式)、或json 字符串
  5. //函數(shù)具有參數(shù), 在函數(shù)調(diào)用的時候傳入的參數(shù) 叫做實際參數(shù),函數(shù)名后面的產(chǎn)生 稱為形式參數(shù),用于接收實際參數(shù),
  6. // 函數(shù)的參數(shù)默認時通過值傳遞的方式,在函數(shù)內(nèi)部對參數(shù)的改變不會影響函數(shù)外面的參數(shù)的值;
  7. //如果須要改變函數(shù)外面參數(shù)的值,可以通過引用的方式傳參,在形參前面加一個取地址符 & ;function getName(&$name){}
  8. //函數(shù) 的作用域: 函數(shù)
  9. // 閉包: php 官方手冊給出的定義是: 閉包函數(shù)就是匿名函數(shù); 就是沒有函數(shù)名(標(biāo)識符)的函數(shù),它可以賦值給一個變量,通過變量名調(diào)用,
  10. // 閉包最常用的 場景就是,作為函數(shù)的返回值返回,后賦值給一個變量,再進行使用。
  11. // 閉包可以沖父作用域中繼承變量,但是 要 使用 use 關(guān)鍵字傳遞進去,
  12. // use 不能用于一下情形: 超全局變量、$this、 當(dāng)前函數(shù)參數(shù)同名的變量;
  13. // 函數(shù) 的作用域: php函數(shù)內(nèi)定義的變量屬性函數(shù)內(nèi),稱為局部作用域,函數(shù)外申明的變量稱為全局作用域;
  14. // php中作用域不重疊,函數(shù)內(nèi)部不能訪問函數(shù)外部的變量(可通過global關(guān)鍵字或$GLOBALS超全局變量訪問),函數(shù)內(nèi)申明的變量不能在函數(shù)外訪問,預(yù)定義的超全局變量可以在整個腳本使用

代碼演示

  1. $a = 456;
  2. // 函數(shù)申明和函數(shù)作用域
  3. function getName()
  4. {
  5. $a = 789;
  6. echo $a;
  7. }
  8. echo $a; // 輸出456
  9. echo '<hr>';
  10. getName(); //輸出 789
  11. //通過實例我們可以看出函數(shù)內(nèi)部不能直接使用函數(shù)外部的全局變量
  12. function getName1()
  13. {
  14. //通過global 關(guān)鍵字使用函數(shù)外部全局變量
  15. global $a;
  16. $a = 999;
  17. echo $a . '<br>';
  18. }
  19. getName1();
  20. echo $a;
  21. $a = 80;
  22. echo $a;
  23. // globla 關(guān)鍵字是直接引用(引用傳值)函數(shù)外部的全局變量到函數(shù)內(nèi)部使用,如果從新賦值,會改變變量初始
  24. echo '<hr>';
  25. $b = 5678;
  26. function getName2()
  27. {
  28. //通過超全局變量 $GLOBALS 在函數(shù)內(nèi)部訪問函數(shù)外部的全局變量
  29. $c = $GLOBALS['b'];
  30. $c = 5680;
  31. return $c += 2;
  32. }
  33. echo getName2();
  34. echo $b;
  35. //通過超全局變量 $GLOBALS 在函數(shù)內(nèi)部使用全局變量,在函數(shù)內(nèi)對變量進行重新賦值,不會改變原變量數(shù)據(jù)
  36. echo '<hr>';
  37. //函數(shù)內(nèi) 靜態(tài)變量 static 關(guān)鍵字定義:靜態(tài)變量在函數(shù)調(diào)用執(zhí)行后不會立即釋放內(nèi)存,可以保持該變量的值,
  38. function getName3()
  39. {
  40. // static $num = 0;
  41. for ($num = 0; $num <= 100; $num++) {
  42. echo $num . '<br>';
  43. }
  44. }
  45. getName3(); // 輸出0-100 的整數(shù);這個例子沒有舉對;
  46. echo '<hr>';
  47. function getNum($u)
  48. {
  49. static $n = 0; //每調(diào)用一次函數(shù) 就更新一下$n
  50. $n++;
  51. echo "\$n自身的值:$n" . '<br>';
  52. return "\$n和\$u相加后的和:$n + $u =" . ($n + $u) . '<br>';
  53. }
  54. echo getNum(1); // 輸出2
  55. echo getNum(1); // 輸出3
  56. echo getNum(1); // 輸出4
  57. echo getNum(1); // 輸出5
  58. echo '<hr>';
  59. //函數(shù)外部訪問函數(shù)內(nèi)部變量;
  60. //(這個邏輯是錯誤的,因為函數(shù)內(nèi)的代碼塊是在函數(shù)調(diào)用執(zhí)行的時候才創(chuàng)建,函數(shù)執(zhí)行完畢后就沒有了,所以在函數(shù)外部是訪問不到函數(shù)內(nèi)部的變量的,只有在函數(shù)執(zhí)行的時候,把須要的值通過返回值的方式獲得,)
  61. function getColor()
  62. {
  63. static $color = 'red';
  64. }
  65. //調(diào)用函數(shù)
  66. getColor();
  67. echo $color; //沒有任何輸出,因為函數(shù)內(nèi)申明的變量, 是局部變量,不能在函數(shù)外面使用,
  68. var_dump($GLOBALS['color']); //通過$GLOBALS 超全局變量 也不能直接獲取函數(shù)內(nèi)部申明的局部變量
  69. // 上面 輸出 : NULL
  70. global $color;
  71. echo $color . '<br>';
  72. var_dump($color); // 同 $GLOBALS 一樣 輸出NULL
  73. getColor();
  74. echo '<hr>';
  75. function getColor1()
  76. {
  77. $color = 'red';
  78. return $color; //要獲取函數(shù)內(nèi)部申明的局部變量 可以通過 函數(shù)返回值的方式
  79. }
  80. echo getColor1(); // 輸出 red;
  81. echo "<hr>";
  82. // 遞歸 : 函數(shù)自己調(diào)用自己
  83. function myExe()
  84. {
  85. static $a = 0; //申明一個靜態(tài)變量
  86. $a++;
  87. if ($a <= 10) {
  88. echo "\$a等于$a" . '<br>';
  89. myExe();
  90. }
  91. }
  92. myExe();
  93. echo "<hr>";
  94. //函數(shù)的參數(shù)
  95. //可分為: 必填參數(shù)、選填參數(shù)(就是函數(shù)的形參有默認值,)不定參數(shù)(假定在不知道參數(shù)個數(shù)的情況下使用 ... ,可以把多個參數(shù)集合到一個數(shù)組中)
  96. // 必填參數(shù)
  97. function show($a)
  98. {
  99. echo $a;
  100. }
  101. //show();// 如果不傳參數(shù)會報錯
  102. show('hello 如來');
  103. echo '<hr>';
  104. //選填參數(shù)
  105. function show1($a = '我是觀音姐姐')
  106. {
  107. echo $a;
  108. }
  109. show1(); // 由于形參有 默認參數(shù),所以在調(diào)用函數(shù)的時候不傳參數(shù) ,函數(shù)也是可以正常執(zhí)行的,
  110. echo "<hr>";
  111. show1('我是觀音姐姐的粉絲');
  112. echo "<hr>";
  113. //不定參數(shù)
  114. function getSum(...$arr)
  115. {
  116. //php 預(yù)定義函數(shù) array_sum() 函數(shù),專門用于數(shù)組求和
  117. return array_sum($arr);
  118. }
  119. echo getSum(10, 20, 30, 40, 50, 60,);
  120. echo "<br>";
  121. echo getSum(10, 20, 30);
  122. echo "<hr>";
  123. //閉包 :閉包 可以理解為匿名函數(shù)
  124. // 申明一個匿名函數(shù) 并賦值給變量$color,這個匿名函數(shù) 可以理解為$color 的值,{}后面須要寫 分號,不然語法錯誤;調(diào)用的時候也用函數(shù)的方式調(diào)用;
  125. $color = function ($a, $b) {
  126. return $a + $b;
  127. };
  128. echo $color(5, 2);
  129. echo "<hr>";
  130. //閉包(匿名函數(shù)) 可以繼承父作用域的 變量,使用 use 關(guān)鍵字 引入父作用的變量,
  131. // use 關(guān)鍵字不能引入 :$this 、 函數(shù)形參變量名相同的變量 、 php超全局變量
  132. $ab = 10;
  133. $abc = 81;
  134. $summ = function ($a, $b) use ($ab, $abc) {
  135. echo $a + $b + $ab + $abc;
  136. };
  137. $summ(5, 4);
  138. echo "<hr>";
  139. // 閉包中的引用傳值
  140. $col = 'red';
  141. $color = function (&$col) {
  142. $col = $col;
  143. echo $col . '<br>';
  144. $col = 'blue';
  145. echo $col . '<br>';
  146. };
  147. $color($col);
  148. echo '<br>';
  149. echo "在函數(shù)內(nèi)從新賦值后的全局變量:\$col 值等于:$col";
  150. echo '<hr>';
  151. //回調(diào)異步執(zhí)行函數(shù) call_user_func_array(函數(shù),[函數(shù)參數(shù)數(shù)組形式])
  152. function getUser($user)
  153. {
  154. return $user .= '生活在偉大的中華人民共和國,他樂觀、積極并且樂于助人';
  155. }
  156. echo getUser('小明'); //正常調(diào)用
  157. echo '<hr>';
  158. echo call_user_func_array('getUser', ['小紅']);
  159. echo "<hr>";
  160. //函數(shù)返回值
  161. // 函數(shù)只能返回一個值:如果要返回對個值,可以改變返回值的數(shù)據(jù)類型, 改為數(shù)組、對象(通過匿名類)、json 等
  162. // 返回單個值
  163. function getAge($age)
  164. {
  165. return $age; //直接返回
  166. }
  167. echo getAge(66); //返回單個值
  168. echo '<hr>';
  169. // 通過數(shù)組形式 返回多個值
  170. function getAge1(...$age)
  171. {
  172. $ages[] = $age;
  173. // $ages[] = 100;
  174. return $ages; //返回數(shù)組
  175. }
  176. var_dump(getAge1(11, 33, 44));
  177. echo '<hr>';
  178. function getAge2($a, $b, $c)
  179. {
  180. $ages[] = $a;
  181. $ages[] = $b;
  182. $ages[] = $c;
  183. // $ages[] = 100;
  184. return $ages; //返回數(shù)組
  185. }
  186. var_dump(getAge1(11, 33, 44)); // 返回的是一個二維數(shù)組
  187. echo '<hr>';
  188. // 通過對象(匿名類的方式)的形式返回對個值
  189. function getAge3()
  190. {
  191. return new class()
  192. {
  193. public $name = '御弟哥哥';
  194. public $age = 1000;
  195. }; // 匿名類后面的 花括號 要加分號 結(jié)束;
  196. }
  197. //把返回的對象 用一個變量接收
  198. $obj = getAge3();
  199. echo $obj->name;
  200. echo '<br>';
  201. echo $obj->age;
  202. echo '<hr>';
  203. //通過 json 格式 返回多個值
  204. function getUser4(): string
  205. {
  206. $users = ['id' => '1', 'name' => '包租婆', 'age' => '50', 'sex' => '女'];
  207. return json_encode($users, JSON_UNESCAPED_UNICODE);
  208. // return json_encode(['id' => '1', 'name' => '包租婆', 'age' => '50', 'sex' => '女'], JSON_UNESCAPED_UNICODE);
  209. }
  210. $users = getUser4();
  211. var_dump($users);
  212. echo $users;
  213. echo '<hr>';
  214. //通過 json_decode()函數(shù) 把 json數(shù)據(jù) 解析并賦值到變量
  215. //解析之后 默認是對象方式調(diào)用;
  216. $user = json_decode($users);
  217. echo $user->id;
  218. echo $user->name;
  219. echo '<hr>';
  220. //json_decode() 函數(shù) 默認以對象方式返回,如果想以數(shù)組的方式返回數(shù)據(jù),須要使用第二個參數(shù),設(shè)置為true
  221. $user = json_decode($users, true);
  222. var_dump($user);
  223. echo '<br>';
  224. echo $user['id'];
  225. echo $user['name'];
  226. echo $user['sex'];
  227. echo '<hr>';
  228. //通過php內(nèi)置序列化函數(shù)返回多個值
  229. // serialize() 函數(shù) (序列化)產(chǎn)生一個可存儲的值的表示,(不說人話),返回一個脂字符串,可用于儲存在任何地方。
  230. // 這有利于存儲或傳遞php的值,同時不丟失其類型和結(jié)構(gòu)。
  231. //resource 類型不能不序列化,其他類型都可以被序列化
  232. // unserialize() 函數(shù) (反序列化) 將已經(jīng)序列化的字符串變化php的值。
  233. function getRes()
  234. {
  235. $ress = ['id' => '1', 'name' => '黑熊精', 'age' => '10000', 'sex' => '公'];
  236. return serialize($ress); //將數(shù)組通過序列化成字符串的方式返回給函數(shù),
  237. }
  238. $ress = getRes();
  239. var_dump($ress);
  240. echo '<hr>';
  241. //將被序列化為字符串的 php數(shù)據(jù),轉(zhuǎn)為正常的php 數(shù)據(jù)
  242. $res = unserialize($ress);
  243. var_dump($res);//打印反序列化后的數(shù)組
批改老師:天蓬老師天蓬老師

批改狀態(tài):合格

老師批語:
本博文版權(quán)歸博主所有,轉(zhuǎn)載請注明地址!如有侵權(quán)、違法,請聯(lián)系admin@php.cn舉報處理!
全部評論 文明上網(wǎng)理性發(fā)言,請遵守新聞評論服務(wù)協(xié)議
0條評論
作者最新博文
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號

  • 登錄PHP中文網(wǎng),和優(yōu)秀的人一起學(xué)習(xí)!
    全站2000+教程免費學(xué)