博客列表 >PHP函数知识

PHP函数知识

知行合一
知行合一原创
2020年07月15日 17:58:33796浏览

php函数的声明与调用

  • 函数是 代码复用的重要手段
  • 变量是 数据利用的重要手段

    函数的格式

    1. function 函数名(参数){
    2. 函数体
    3. }
    其中,函数名和变量一样,必须由数字 字母 下划线组成,可为空。参数也可为空。函数体由多条语句构成,也可为空。

    演示效果

    1. function score(string $a,int $b):string{//php函数名后冒号+数据类型(返回值类型限制/php新特性)
    2. return $a.'的分数是'.$b;
    3. }
    4. echo score('小明',90).'<hr>';

    函数类型

    1.自定义函数 ,命名函数,具名函数

    1. function getPrice(float $money,float $discount):float{
    2. return $money*$discount;
    3. }
    4. echo '最终金额是:'.getPrice(981,0.5).'<hr>';

    2.系统函数(预定义函数)

    1. $str='方法的返回值必须为一个User类实例;delete方法的返回值必须是布尔数据类型';
    2. echo substr($str,0,6).'<br>';
    3. echo mb_substr($str,0,6).'<hr>';
    使用substr函数的结果是:返回 ‘函数’两个词,UTF8下,每个汉字占三个字节,如果截取4个就乱码了。substr() 函数,它只针对英文字符
    如果要分割的中文文字则需要使用 mb_substr()。

    3.可变函数

    如果一个变量名后有圆括号,PHP将寻找与变量的值同名的函数,并且尝试执行它。
    1. function getPrice(float $money,float $discount):float{
    2. return $money*$discount;
    3. }
    4. $function='getPrice';
    5. echo '最终实付'.$function(500,0.2).'<hr>';

    匿名函数

    以下为网络整理而得,非原创。
    1.简单例子
    1. $anonymousFunc = function($username){
    2. echo $username;
    3. };
    4. $anonymousFunc("乔峰!");
    5. echo '<hr>';
    2.将匿名函数放在普通函数中,也可以将匿名函数返回,:这样就构成了一个简单的闭包
    1. function closureFunc(){
    2. $anonymousFunc = function(){
    3. echo "乔峰2";
    4. };
    5. $anonymousFunc();//普通函数内部调用了匿名函数
    6. }
    7. closureFunc();//输出: 乔峰2
    8. echo '<hr>';
    在匿名函数中引用局部变量(这里要引用一个php的关键字 use)
    1. function closureFunc2(){
    2. $username = '乔峰3';
    3. $anonymousFunc = function() use($username){
    4. echo $username;
    5. };
    6. $anonymousFunc();//此处调用了匿名函数
    7. }
    8. closureFunc2();//输出: 乔峰3
    9. echo '<hr>';
    4.在普通函数中返回匿名函数
    1. function closureFunc3(){
    2. $username = '乔峰4';
    3. $anonymousFunc = function() use($username){
    4. echo $username;
    5. };
    6. return $anonymousFunc;// 函数返回匿名函数
    7. }
    8. $func = closureFunc3();
    9. $func(); //然后调用$func()
    10. echo '<hr>';
    5.返回匿名函数并给匿名函数传参
    1. function closureFunc4(){
    2. $username = '乔峰5';
    3. $anonymousFunc = function($lover,$skill) use($username){
    4. echo $username.$lover.$skill;
    5. };
    6. return $anonymousFunc;
    7. }
    8. $func = closureFunc4();
    9. $func("阿朱","擒龙手");//乔峰阿朱擒龙手
    10. echo '<hr>';
    6.把匿名函数当作参数传递
    1. $anonymousFunc2 = function($username){
    2. echo $username;
    3. };
    4. //定义普通函数,anonymousFunc2 为参数变量
    5. function myFunc($anonymousFunc2){
    6. $anonymousFunc2("段誉3");
    7. }
    8. myFunc(function($username){ //这里调用普通函数,并把 匿名函数作为参数 传给了myFunc中的$anonymousFunc
    9. echo $username;
    10. });//输出 段誉3

    函数返回值

  • 函数都是有返回值
  • 函数只能返回单一的值
  • 重点放在多值返回

    1.使用字符串拼接来输出多值

    1. function demo1():string
    2. {
    3. $status=1;
    4. $message='成功';
    5. return $status.','.$message;
    6. };
    7. echo demo1().'<hr>';

    2.通过数组返回

    1. function demo22():array
    2. {
    3. $sex='女';
    4. $message1='小王子';
    5. $message2='小公主';
    6. return ['sex'=>$sex,'message1'=>$message1,'message2'=>$message2];
    7. };
    8. echo demo22()['sex']==='男'?demo22()['message1']:demo22()['message2'];
    9. echo '<hr>';

    3.通过Json返回 。Json是JS对象字面量的字符串表示。

    1. function demo32():string
    2. {
    3. $sex='男';
    4. $message1='小王子';
    5. $message2='小公主';
    6. return json_encode(['sex'=>$sex,'message1'=>$message1,'message2'=>$message2]);
    7. //对JSON格式的字符串进行编码
    8. };
    9. echo demo32().'<br><br>';
    10. echo gettype(demo32()).'<br><br>';//查看类型 返回的是字符串
    11. print_r (json_decode(demo32())); //返回对象
    12. echo '<br><br>';
    13. print_r (json_decode(demo32(),true));//强制返回数组
    14. echo '<hr>';

    4.序列化方式

    1. function demo44():string
    2. {
    3. $sex='男';
    4. $message1='小王子';
    5. $message2='小公主';
    6. return serialize(['sex'=>$sex,'message1'=>$message1,'message2'=>$message2]);
    7. //对JSON格式的字符串进行编码
    8. };
    9. echo demo44().'<br>';
    10. //反序列化,还原
    11. print_r(unserialize(demo44()));

    函数的参数

    1.值参数,这是默认

    1. $age=12;
    2. $num=10;
    3. $res=function (float $number) use ($age) :float{
    4. return $number+=$age;
    5. };
    6. echo '小明今年'.$age.'岁,'.'10年后他是'.$res($num).'岁<br>';
    7. echo $num.'<hr>';

    2.引用参数,需要在参数前添加地址符&

    1. $age2=12;
    2. $num2=10;
    3. $res2=function (float &$number) use ($age2) :float{
    4. return $number+=$age2;
    5. };
    6. echo '小明今年'.$age2.'岁,'.$num2.'年后他是'.$res2($num2).'岁<br>';
    7. echo $num2.'<hr>';

    3.默认参数。 凡是有默认值的参数,一定要写在没有默认值的参数后面。

    1. function helloWord(float $number,string $sex='北京'):string{
    2. return $number>18?$sex.'大人':$sex.'小孩';
    3. };
    4. $age3=20;
    5. $age4=12;
    6. echo helloWord($age3,'上海').'<br>';
    7. echo helloWord($age4).'<hr>';

    4.剩余参数

    用在函数参数列表中,用来收集。
    1. function demo4(...$args){
    2. for($i=0,$res2=1;$i<count($args);$i++){
    3. $res2*=$args[$i];
    4. }
    5. return $res2; //数组求和
    6. }
    7. echo demo4(1,2,5,4,10);
    将剩余参数用在函数的调用表达式中 是展开
    1. $arr=[1,2,5,10];
    2. print_r(demo4(...$arr));

    函数的命名空间

  • 代码中使用命名空间,那么代码中所有成员必须使用命名空间。
  • 命名空间前面不能有代码。 当前使用了命名空间的脚本中,所有的代码必须放在命名空间中,访问中必须带上命名空间。
    1. namespace aa{
    2. function demo1(){
    3. echo 'AA张三';
    4. };
    5. };
    6. namespace bb{
    7. function demo1(){
    8. echo 'BB张三';
    9. };
    10. };
    11. namespace{
    12. echo \aa\demo1();
    13. echo \bb\demo1();
    14. }

    总结

    学习的内容要多练习,学习过程中有不理解的可以搜索相关的文档,多看看别人的笔记解释等,就会有所收获。遇到不会的可以先放一放,过几天再进行回顾,有可能就豁然开朗了.
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议