函数返回值和回调函数
发布于:2022-01-23 12:15:06
次阅读
函数返回值和回调函数
// !设置时区,有个类同查询时区的函数date_default_timezone_set("PRC");// 查询时区函数echo date_default_timezone_get();// todo命名函数,$a与$b为形参,调用时需传入实际参数function sum($a,$b){ return $a+$b;};// 调用命名函数echo sum(10,20);echo '<pre>';echo date("Y-m-d H:i:s");echo '<pre>';// * ()括号内的string表示参数只能传字符串类型,后面的string表示返回值只能是字符串类型function total(string $total):string{ return "{$total}的优质商品";};// 因上面的函数指定了传参类型,调用时只能传指定类型参数echo total('物美价廉');echo total(10);//就算传入整型也会自动被转换成字符串型echo '<pre>';/** * 参数:可选的,对外提供一个接口,供函数调用者按照自已的意愿改变函数体内的执行行为 *参数 有形参和实参 * 默认参数就是有默认值的参数,如果不传或少传就会默认参数的值 * 参数是从左往右求值,所以默认参数要放在右边 */ function getAmount(&$price,$num,$discount=0.9){ // *=是$price = $price*$discount的简写 $price *= $discount; $amount = $price*$num; return "总共需要支付{$amount}"; };// *如果函数使用&引用符,将会改变全局变量的值 $price = 800; $num = 5; $discount = 0.8; echo getAmount($price,$num,$discount); //因函数使用了&引用符,所以变量的值将会改变输出 echo $price;// !函数返回值,可以任意类型function test(){ // 返回json类型的数据,后面的320代表不转义中文和\ return json_encode(['id'=>1,'name'=>'转json格式'],320); // 返回表达式布尔值 return '1'==1; // 返回MD5加密字符串 return md5('123456'); // 返回对象 return new stdClass(); // 返回多维数组 return array([ ['id'=>1,'name'=>'张三','conten'=>'多维数组'], ['id'=>2,'name'=>'李四','conten'=>'多维数组'], [ 'id'=>3,'name'=>'王五','conten'=>'多维数组'], ]); return array('id'=>1,'name'=>'张三','conten'=>'关联数组'); return array('123','索引数组');//返回关联数组 return '返回字符串'; // 返回浮点型 return 25.55; return 1;//返回整型};$res = test();var_dump($res);// !命名函数全局变量的调用方法$name = '张老师';$tel = 13800138000;function test1(){ /** * 函数内要调用全局中的变量方法 * 1 使用全局变量引入global * 2 使用超全局变量$GLOBALS['name'] * */// 全局引用global $name,$tel;return "{$name}的手机号码是{$tel}";// 超全局调用return "{$GLOBALS['name']}的手机号码是:{$GLOBALS['tel']}";};// 调用函数echo test1();/** * !匿名函数或叫回调函数的全局变量调用方法 *匿名函数调用全局方法 use (全局变量名) *///$test2 = function () use ($name,$tel){return "{$name}的手机号码是:{$tel}";};// 调用匿名函数echo $test2();// 回调函数调用方法Closure 代表闭包echo "<pre>";function test3( Closure $func,$qq){ $msg = $func(); return "{$msg}<br>QQ号码是:{$qq}";};echo test3($test2,'123456');echo '<pre>';$arr2 = [1,10,30,45,28,30,22];$arr = range(0,500);$odd =function($arr){ for($i = 0 ; $i < count($arr); $i++){ if($arr[$i] % 2 ==0){ $newArr[] = $arr[$i]; } } return $newArr;}; // 第一个参数为匿名函数,第二个为传任意数组function newSum($func,$arr){ $newArr = $func($arr); return array_sum($newArr);};// todo 调用传参第一个是匿名函数的变量名,第二个参数为任意数组var_dump(newSum($odd,$arr));