函数返回值和回调函数
// !设置时区,有个类同查询时区的函数
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));