
批改狀態(tài):合格
老師批語:
1.完成特定功能的代碼塊;
2.分為命名函數(shù)(全局成員不受作用域限制)和匿名函數(shù)
function 函數(shù)名稱([參數(shù)列表-形參])
{
函數(shù)體
return 返回值
}
//不受作用域限制可以在函數(shù)上面調(diào)用也可以在函數(shù)下面調(diào)用
demo(22,2) // 11
function demo()
{
retuen $one / $two;
}
demo(22,2) // 11
1.return只能返回單個值;如果想返回多個值,可以返回一個數(shù)組或?qū)ο螅?br>2.return后面的代碼不會被執(zhí)行;
function demo($one, $two)
{
retuen $one / $two;
echo '你好';
}
demo(22,2) //11;
沒有執(zhí)行echo輸出'你好';
function demo($one, $two)
{
return sha1('ipnx.cn');
//string(40) "9210325b59990016a4d9bf6709670b7dc8ab4d02"
return md5('ipnx.cn');
//string(32) "372dba858dc62fee52a552a044caa82e"
return 1 == 1;
//bool(true)
return new StdClass();
//object(stdClass)#1 (0) { }
return array('11','22');
//array(2) { [0]=> string(2) "11" [1]=> string(2) "22" }
return 22.22;
//float(22.22)
return '你好';
//string(6) "你好"
return true;
//bool(true)
}
var_dump(demo());
//數(shù)組
function demo()
{
return ['name' => 'ccc', 'gender' => 'ddd'];
}
$obj = demo();
var_dump($obj);//array(2) { ["name"]=> string(3) "ccc" ["gender"]=> string(3) "ddd" }
echo $obj['name']; //ccc
echo $obj['gender']; //ddd
//對象
function demo()
{
return new class()
{
public $name = 'ccc';
public $gender = 'ddd';
};
}
$obj = demo();
var_dump($obj); //object(class@anonymous)#1 (2) { ["name"]=> string(3) "ccc" ["gender"]=> string(3) "ddd" }
echo $obj -> name; //ccc
echo $obj -> gender; //ddd
//json字符串
function demo()
{
//json_encode(參數(shù))將數(shù)組轉(zhuǎn)為json字符串
return json_encode(['status' => 1, 'msg' => '驗(yàn)證成功']);
}
$obj = demo();
var_dump($obj); //string(45) "{"status":1,"msg":"\u9a8c\u8bc1\u6210\u529f"}"
/**
* json_encode(參數(shù),320)將數(shù)組轉(zhuǎn)為json字符串,第二個參數(shù)320,中文不轉(zhuǎn)為unicode同時(shí)不轉(zhuǎn)義反斜杠;
* JSON_UNESCAPED_UNICODE對應(yīng)數(shù)字256 => 中文不轉(zhuǎn)為unicode;
* JSON_UNESCAPED_SLASHES對應(yīng)數(shù)字64 => 不轉(zhuǎn)義反斜杠;
* son_encode(['status' => 1, 'msg' => '驗(yàn)證成功'], 320) => string(33) "{"status":1,"msg":"驗(yàn)證成功"}"
*/
var_dump( json_decode($obj); //object(stdClass)#1 (2) { ["status"]=> int(1) ["msg"]=> string(12) "驗(yàn)證成功" } =>是個對象
/**
* json_decode(參數(shù),boolean);將json字符串轉(zhuǎn)為數(shù)組
*false 默認(rèn)值,轉(zhuǎn)為對象;
*true 轉(zhuǎn)為數(shù)組;
*json_decode($obj, true); =>array(2) { ["status"]=> int(1) ["msg"]=> string(12) "驗(yàn)證成功" }
*/
1.可以有多個參數(shù), 以英文逗號 , 隔開;
2.形參可以有默認(rèn)值;
3.實(shí)參會替換掉形參;
4.實(shí)參與形參存在從左向右一 一對應(yīng), 如果沒對應(yīng)就會報(bào)錯(實(shí)參的第一個值默認(rèn)對應(yīng)形參的第一個值);
//形參都沒有默認(rèn)值
function demo($one, $two)
{
return $one + $two;
}
echo demo() //報(bào)錯
echo demo(1,2) //3
//形參都有默認(rèn)值,實(shí)參會替換掉形參
function demo1($one = 1, $two = 2)
{
return $one + $two;
}
echo demo1() //3
echo demo1(3, 4) //7
//第二個形參有默認(rèn)值,實(shí)參替換第一個形參,第二個形參使用默認(rèn)值
function demo2($one, $two = 2)
{
return $one + $two;
}
echo demo2(1) //3
//第一個形參有默認(rèn)值,實(shí)參替換第一個形參,第二個形參沒有默認(rèn)值
function demo3($one = 1, $two)
{
return $one + $two;
}
echo demo3(2) //報(bào)錯
適用于參數(shù)個數(shù)不確定的時(shí)候
//在形參中表示收集的作用,在實(shí)參中表示展開的作用
$arr = [555, 666, 777, 888];
function demo(...$args)
{
var_dump($args);
}
demo(111, 222, 333, 444)
//array(4) { [0]=> int(111) [1]=> int(222) [2]=> int(333) [3]=> int(444) }
demo(...$arr)
//array(4) { [0]=> int(555) [1]=> int(666) [2]=> int(777) [3]=> int(888) }
1.匿名函數(shù)又叫閉包c(diǎn)losure, 指允許臨時(shí)創(chuàng)建的一個沒有名字的函數(shù)
2.匿名函數(shù)通常需要賦給一個變量,所以匿名函數(shù)的作用域問題通常指閉包中變量的作用域問題
3.匿名函數(shù)需要在{}花括號后面加;分號
4.閉包通常作為函數(shù)的返回值使用;
5.通過引用傳值的方式可以改變?nèi)肿兞可舷挛牡闹?/p>
//受作用域限制不可以在函數(shù)上面調(diào)用,只可以在函數(shù)下面調(diào)用
//echo $demo(1,2); //報(bào)錯
$demo = function($one, $two)
{
return $one + $two;
};
echo $demo(1,2); //3
//作為函數(shù)的返回值
function getInfo($name)
{
return function($gender) use ($name)
{
return "名字叫{$name}, 性別是{$gender}";
};
}
echo getInfo('ccc'); //報(bào)錯 因?yàn)榉祷氐牟皇亲址情]包函數(shù)
//解決辦法1:直接將第二個參數(shù)傳進(jìn)去
echo $getInfo('ccc')('ddd'); ////名字叫ccc, 性別是ddd
//解決辦法2:先賦給一個變量再傳第二個參數(shù)
$closure = getInfo('ccc');
echo $closure('ddd'); //名字叫ccc, 性別是ddd
//改變?nèi)肿兞康闹?/span>
$name = 'ccc';
$demo = function($newName) use ($name)
{
$name = $newName;
};
$demo('eee');
echo $name; //ccc 沒有改變
//引用賦值&
$demo = function($newName) use (&$name)
{
$name = $newName;
};
$demo('eee');
echo $name; //eee 有改變
函數(shù)體外聲明的變量
全局變量在函數(shù)體內(nèi)是無法訪問的;命名函數(shù)解決辦法是用關(guān)鍵字global或超全局變量$GLOBALS;匿名函數(shù)解決辦法是用use();
//命名函數(shù)
$name = 'ccc';
$gender = 'ddd';
function getInfo()
{
return "名字叫{$name},性別是{$gender}";
}
echo getInfo(); //報(bào)錯
//使用關(guān)鍵字global
function getInfo_pro1()
{
global $name, $gender;
return "名字叫{$name},性別是{$gender}";
}
echo getInfo_pro1(); //名字叫ccc,性別是ddd
//使用超全局變量$GLOBALS
function getInfo_pro2()
{
return "名字叫{$GLOBALS['name']},性別是{$GLOBALS['gender']}";
}
echo getInfo_pro2(); //名字叫ccc,性別是ddd
//匿名函數(shù)
$name = 'ccc';
$gender = 'ddd';
$getInfo = function()
{
return "名字叫{$name},性別是{$gender}";
};
echo $getInfo(); //報(bào)錯
$getInfo = function() use ($name, $gender)
{
return "名字叫{$name},性別是{$gender}";
};
echo $getInfo(); //名字叫ccc,性別是ddd
在函數(shù)體內(nèi)聲明的變量
局部變量在函數(shù)體外無法訪問
function getInfo()
{
$name = 'ccc';
$gender = 'ddd';
return "名字叫{$name},性別是{$gender}";
}
echo getInfo(); //名字叫ccc,性別是ddd
echo $name //報(bào)錯
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號