精易论坛

标题: PHP - 函数 [打印本页]

作者: dream518    时间: 2020-7-15 18:56
标题: PHP - 函数

函数


1. 语法


函数是实现代码复用的重要方式,在所有编程语言中均如此


function 函数名称(类型: 参数列表): 返回值类型
{
    // 函数体
    return 返回值;
}














































序号 名称 描述
1 function 声明函数
2 函数名称 符合 PHP 标识符命名规范,不区分大小写
2 参数列表 零个或多个接收外部传入到函数的变量
2 {... 创建出一个封闭的函数作用域
2 函数体 由零个可多个合法的 PHP 语句组成
2 return 值 将执行结果返回函数调用者[可选]
2 ...} 函数执行结束,如果没有return,则返回null


function getPrice(int $a , int $b) : int
{
    $c = $a+$b;
    return $c;
}
echo getPrice(2,3);
//上面限定了参数和返回值类型int 那么只能返回int
// 如 echo grtPrice(2.2,3.3) 只计算整数部分2+3 设置为float即可计算小数



2. 类型





































序号 类型 语法 描述
1 自定义函数 function getName(){...} 用户根据业务需求创建
2 系统函数 substr(), count()... 也叫预定义函数,不必声明直接调用
3 可变函数 $funcName(); 函数名使用变量表示
4 匿名函数 $f = function (){...} 也叫"闭包"或"函数表达式",常用做回调处理


上面的示例 即为自定义函数



2.2 系统函数


常用系统函数https://www.php.cn/blog/detail/20906.html



是由 PHP 系统提供给用户用的,不需要用户去创建的函数



// 系统函数
$str = '我爱你中国,亲爱的母亲';
// 截取字符串
echo mb_substr($str , 0 , 7);   //输出 我爱你中国,亲
//某字符串出现次数
echo substr_count($str ,'爱');  //输出 2

2.3 可变函数


function rice(int $a , int $b)
{
      echo $a+$b;
}
rice(2,3);
echo '<hr>';
// 可变函数,将函数名赋值为一个变量的值
$get = 'rice';
$get(5,6);
echo '<hr>';


跟可变变量一样



2.4 匿名函数


// 匿名函数
// 声明一个折扣率
$discount = 0.8;
// 匿名函数结束必须要有‘;’ 因为他现在是一个赋值语句、用use() 访问外部变量
$Amont = function(float $money, int $num) use ($discount) :float
{
   $amount = $money * $num;
   return $amount >= 2000 ? $amount * $discount : $amount ;

};

echo $Amont(100,20); //输出 1600



3. 返回值























序号 场景 描述
1 return 可以返回任何类型的值,包括函数类型
2 return 遇到}也会返回, 默认返回null
































序号 返回值类型 描述
1 string 字符串拼接
2 array 数组
3 json JSON 字符串
4 serialize 序列化字符串

json 跟 serialize 的区别


(1)serialize 主要用于 php 的序列化,存储到文件或者数据库中,json_encode 也是序列化,但是 主要用于与其他语言比如 js 进行交互使用,对于传输来说,json 有许多优点。


(2)在显示上,serialize 序列化的字符串包含额外的内容,这是值的类型和长度的编码


(3)在进行 json_decode 解码的时候需要注意,如果是序列化的数值型数组,那么 json_decode 可以还原为原来的数组(数值型数组哦),但是,如果序列化的是关联数组(或者对象),那么由于 json_decode 无法判断是关联数组还是对象(我们可以理解为这两个长的像无法区分),所以 json_decode 会默认还原解析为 stdclass 的对象,如果加了 true 才解析为关联数组


(4)json_encode 不能序列化对象的成员方法,代码如下:


serialize 序列化之后,反序列化的数据,可以重新调用成员方法,但是 json_decode 不行,会报错,具体可以测试、


(5)__sleep__wakeUp 魔术方法




json 和序列化,使用时需要进行解码操作




// 字符串拼接 用 ‘.’ 拼接  ""双引号可以解析里面的变量

function getSum($a,$b)
{
   return "$a * $b =" . $a*$b ;
}

echo getSum(5,6);   //输出 5 * 6 = 30
// 数组返回

function tianqi(): array
{
    return ['city'=>'北京','today'=>'星期一','date'=>'2020年4月21日14:48:00'];
}

$tianqi = tianqi();

echo $tianqi['city'];  //输出 北京

echo '<hr>';

// 转为匿名函数

$tianqi  = function (): array
{
    return ['city'=>'北京','today'=>'星期一','date'=>'2020年4月21日14:48:00'];
};

// $tianqi = tianqi();

// echo $tianqi['city'];
# 这个地方会报错,提示不能将闭包类型的对象用作数组。
echo $tianqi()['city'];
#这样写才是对的






欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4