PHP从入门到精通

之PHP中的函数

   各位开发者朋友大家好,自上次更新PHP的相关知识,得到了大家的广泛支持。PHP的火爆程度不言而喻,函数作为PHP中极为重要的部分,应诸位的支持,博主继续跟进更新PHP中的函数知识,为大家带来最详细实用的知识讲解,感谢大家的支持!

   以下为函数的详细知识:

函数的声明和使用

1、函数名是标识符之一,只能有字母数字下划线,开头不能是数字。

函数名的命名,须符合"小驼峰法则"  myName my_name

函数名不区分大小写func(),FUNC()

函数名不能与已有函数名重复,不能与系统函数名重复;

2、function_exists("fun1");用于检测函数是否已声明;

注意:传入函数名,必须是字符串格式;返回结果为true/false;

简单函数的声明和调用:

function func1(){echo "函数里面的语句";
}
func1();
FUNC1();

PHP中函数的作用域

1、局部变量:声明在函数内部的变量,称为局部变量。只在函数内部能用,函数外如需使用,需在函数中用return关键字返回;

2、全局变量:声明在函数外部的变量,称为全局变量。

<函数中使用全局变量的3种方式:>

3、函数中,使用变量,默认使用全局变量。只在函数外部能用,函数内如需使用,需在函数中用global关键字将变量改为全局变量引入;函数中的变量名如果与全局变量重复,global语句之上的为函数局部变量,global之下的为系统全局变量;

4、$GLOBALS[""]全局数组:

$GLOBALS[""]数组,是PHP给我们内置的全局数组,可以直接给数组添加值,无论在函数内外声明,均可在任何地方直接使用;

5、函数中使用全局变量还有一种方式,:通过给函数传参,可以在函数内部使用过全局变量;

但是,传递以后的参数是函数的局部变量,内部改变,外部不会变;

除非,传递的参数是地址function func($a1,&$a2){}//函数内部修改a1,全局a1不变;函数内修改a2,全局a2跟着变;

如果,函数的形参,出现了取址符号,则,调用函数时,实参必须是变量,而不能是自变量:

eg上式中:func(1,2)×   func(1,$a2)√

6、使用require和include包含,不会影响作用域;

实例展示:

$a1=10;
function func(){$a1=30;echo "0.$a1</br>";//global之上使用局部变量$GLOBALS["a3"]=40;echo $GLOBALS["a3"]."</br>";//global数组global $a1;$a2=20;echo "1.$a1</br>";//global之下使用全局变量echo "1.$a2</br>";return $a2."</br>";
}
$a2=func();    echo "2.{$a1}</br>";//使用全局变量
echo "2.{$a2}</br>";//通过return返回,通过变量接受
echo $GLOBALS["a3"]."</br>";//函数中通过$GLOBALS["a3"]声明,函数外能用。

静态变量

1、静态变量使用static关键字声明。

static $num=0;

2、静态变量的特点:

>>>静态变量在函数第一次加载的时候进行声明。

>>>函数使用完不会立即释放变量,静态变量在整个脚本过程中,只会声明一次。

>>>同一函数,多次调用,共享一个静态变量。

实例展示:

function func(){static $num=0;$num++;echo $num."</br>";
}
func();
func();
func();

函数的参数传递

此处插入一条,需特别注意:在PHP中,设计参数传递时,实参列表只能比形参多,不能比实参少!

1、常规参数传递:

2、伪类型参数传递:(详见案例)

①通过&引用参数传递,函数内修改变量,函数外同步变化;

②形参为引用参数,实参只能是变量,不能是字面量:func(10)×

3、默认参数的调用:function func($a=10,$b){}  func(,20);//$a可以不传参数,默认是10;$b必须传参数

>>>如果参数中既有默认参数,又有非默认参数,那么,默认参数列表必须要在非默认参数列表的后面!即调用的时候,必须保证非默认参数的优先赋值。

4、可变参数列表传递:由于PHP实参可以比形参多,那么我们可以传递N个实参,并通过PHP内置函数取到对应参数。

func_get_args()//取所有参数列表(数组)

func_num_args()//返回参数的总个数,相当于count($arr);

func_get_arg(0)//根据下标,取每个参数;相当于$arr[0];

实例展示:

function($a){$a+=10;return $a;
}
echo func(10);//引用类型的参数传递
$a=10;
functionfunc(&$a){$a+=10;
}
func($a);//通过取址符号,可以直接将传入的$a的值改掉。
echo $a;//默认参数
function func($b,$a=10){return $a+$b;
}
echo func(20);//可变参数列表
function func(){$arr=func_get_args();var_dump(func_get_args());//取所有参数列表(数组)var_dump(func_num_args());//返回参数的总个数//var_dump(count($arr));//同上var_dump(func_get_arg(0));//根据下标,取每个参数//var_dump($arr[0]);//同上$sum=0;$count=func_num_args();for($i=0;$i<$count;$i++){//$sum+=func_get_arg($i);$sum+=$arr[$i];}return $sum;
}
echo func(1,2,3,4,5);

回调函数

1、使用变量函数,自定义回调函数:

function($func){$func();}  -->  function f(){} --->  func("f")

2、使用call_user_func_array和call_user_func自定义回调函数:

两个函数的第一个参数,均为回调函数,表示执行当前回调;

不同点在于:前者的第二个参数为数组,并将数组的每个值赋给回调函数的参数列表

后者的参数列表直接展开写到第2~多个参数中

实例展示:

//变量函数
function func($a){echo "Q的前端{$a}";
}
$fun="func";
$fun(10);//自定义回调函数
function func($start,$end,$fun){//$fun="func";//$fun();for($i=$start;$i<=$end;$i++){if($fun($i)){echo "{$i}</br>";}}
}
function filter($num){if($num%3!=0){return true;}else{return false;}
}
func(1,59,"filter");//使用call_user_func_array和call_user_func自定义回调函数
function func(){$arr = func_get_args()    ;$str = "";for($i=0;$i<count($arr);$i++){$str = $arr[$i];}return $str;
}//相当于apply
echo call_user_func_array("func", array("杰瑞","教育","HTML5","+","PHP"));
//相当于执行func函数,并且把数组的每一项作为参数传入
echo "<br>";
//相当于call
echo call_user_func("func","杰瑞","教育","HTML5","+","PHP");

匿名函数

由于变量函数在调用时存在多种调用方式(func()/$fun())

所以为了让函数的调用更加统一,才产生了匿名函数。

!!!声明匿名函数,函数体后面的分号必不可少!!!

匿名函数本身也是变量,用var_dump()检测,为Object类型;

实例展示:

function func(){}
func();
$fun="func";
$fun();
$func=function($a){echo "这是匿名函数{$a}";
};
$func(10);//可以传参

递归函数

1、所谓递归,指的是在函数内部执行自身的操作;

2、递归分为两步:递(类似JS事件捕获)   归(类似JS事件冒泡);

  递:当最外层函数体中,遇到自身函数调用,继续进行内层函数执行。而外层函数的后半部分暂不执行。直到最内层函数执行完后,再逐步向外执行。

实例展示:

function func($num){echo $num."</br>";if(){func($num-1);}echo $num."</br>";}func(10);

附图说明:

include&require

1、两者的作用,都是引入外部的PHP文件到当前文件夹中;

2、两者的区别:当引入文件错误时,include会产生警告,并不影响后续代码执行;而require会产生致命错误,后续代码全部不再执行;
3、一般,当用于在文件最上方导入某些文件时,使用require导入,如果导入失败,则不执行文件;
而如果是在某些分支条件中,导入某些操作,使用include导入,即使导入失败,不影响后续代码执行;
4、include_once和require_once表示:文件只能导入一次。如果多次调用函数,则后面的语句会判断文件是否导入,再决定是否导入新文件(效率优化问题,不推荐)
!!!注意:检测文件时,只关心文件是否导入,并不关心是以何种方式导入的;
5、include和require可以导入各种类型的文件,相当于在当前文件copy了一份,但是在copy过程中,PHP引擎会进行适当的编译,确保不出现不必要的错误。
6、include和require是函数,也是指令。PHP对很多常用函数,会提供指令的写法。
eg:函数写法:echo("11"); 指令写法:echo "11";

实例展示:

include ("funcText.php");
//require ("funcText.php");//接相对路径
func1();
func2();
func3();

以下为funcText.php文件中的代码:
<?phpheader ("Content-Type:text/html; charset=utf-8");function func1(){echo "我是func1</br>";
}
function func2(){echo "我是func2</br>";
}
function func3(){echo "我是func3</br>";
}

本期分享就到这里,觉得内容不错的小伙伴请点推荐,欢迎大家在评论下方评论区与博主互动,谢谢大家!

未完,待续。。。

更多详细内容,敬请关注 Q的前端世界的技术博客。

转载于:https://www.cnblogs.com/liuyongqi/p/6942996.html

【PHP】最详细PHP从入门到精通(二)——PHP中的函数相关推荐

  1. 【PHP】最详细PHP从入门到精通(三)——PHP中的数组

     PHP从入门到精通 之PHP中的数组 各位开发者朋友大家好,链接上次更新,我们PHP的学习也更深了一层,本次博主给大家带来PHP数组的数组实例详解的相关资料.数组分为数组数值数值,关联数组,多维数组 ...

  2. Simulink仿真入门到精通(十) S函数

    Simulink仿真入门到精通(十) S函数 10.1. S函数的概述 10.2 S函数的类型 10.3 S函数的要素 10.4 S函数的组成及执行顺序 10.5 使用不同的语言编写S函数 10.5. ...

  3. Kali Linux 从入门到精通(二)-安装

    Kali Linux 从入门到精通(二)-安装 Kail Linux 安装 持久加密USB安装-1 LUSK:Linux Unified Key Setup 磁盘分区加密规范 不依赖与操作系统的磁盘级 ...

  4. Mybatis从入门到精通二(入门详解)

    Mybatis从入门到精通二(想学Mybatis,看了这一篇你就不需要其他的了) 本课程分为两天第一天的请参考: https://blog.csdn.net/weixin_43564627/artic ...

  5. java从入门到精通二十四(三层架构完成增删改查)

    java从入门到精通二十四(三层架构完成增删改查) 前言 环境准备 创建web项目结构 导入依赖和配置文件 创建层次模型 实现查询 实现添加 实现修改 完成删除 做一个用户登录验证 会话技术 cook ...

  6. java从入门到精通二十三(Servlet)

    java从入门到精通二十三(Servlet) Servlet 说明 Servlet初步入门尝试 Servlet生命周期 Servlet方法说明和体系结构 方法说明 体系结构说明 一些优化封装 urlP ...

  7. unity 5.x从入门到精通_Unity学习中值得收藏的学习资料(书籍)与博客

    前言: 对于入门任何领域,收集相关比较优秀的学习资料,都是你不断提高自己的必备技能.而在信息爆炸的时代想要在繁杂的网络世界中找到好的学习资料,必然会耗费一定的时间和精力.为了给大家节省一点时间,在这里 ...

  8. Matlab从入门到精通-在线性代数中的应用(二):求解齐次线性方程组

    前言 在 Matlab 中,函数 null 用来求解零空间,即满足 Ax=0 的解空间,实际上是求出解空间的一组基(基础解系). 以下是我为大家准备的几个精品专栏,喜欢的小伙伴可自行订阅,你的支持就是 ...

  9. MATLAB从入门到精通-Matlab R2020b中的新标记符号(New-marker-symbols)

    Matlab R2020b中的新标记符号(New-marker-symbols)! MatlabR2020B版本引入了新的水平("_")和垂直("|")线标记符 ...

最新文章

  1. 取消水晶报表的数据库登录框 分享
  2. 第三十三讲:tapestry Ajax eventlink无刷新页面
  3. 微信短内容要来了!新功能已开启内测申请
  4. 18岁男子吸电子烟一年肺如70岁老人,怒诉电子烟公司
  5. 前端vue项目开发流程
  6. 聊聊拒绝忽悠的批判性思维
  7. VGA信号一些分辨率的参数(摘抄)
  8. 神经网络如何利用C语言实现动画?
  9. base64编码将字符串转换为图片
  10. 在ubuntu中运行qq
  11. 基于3D Vision眼镜的OSG立体显示
  12. 学堂云 意在象中-中国古典诗词鉴赏
  13. 宏观经济学 - 国民收入的决定:收入-支出模型
  14. 可以发送图片文件的php聊天室,基于 Swoole 开发实时在线聊天室(十四):发送图片消息...
  15. 前端自动化构建工具:用Gulp4.0搭建一个基本的前端开发环境
  16. 家谱mysql_mysql家谱表查询某人所有后代
  17. 数据库的列类型与字段属性
  18. IDE Eval Reset 插件安装使用
  19. 机器人3D模型可视化建模线上三维虚拟现实展示
  20. 证实!对华28nm以下大硅片出口管制已纳入瓦森纳协定

热门文章

  1. Java实现SSH模式加密
  2. php math函数
  3. python 导入 包
  4. 搭建高效、可靠、稳定的WEB服务器
  5. 如何让所请读取的数据自动产生编号.
  6. 阿里云MaxCompute(大数据)公开数据集---带你玩转人工智能
  7. 《统一沟通-微软-实战》-7-配置-3-响应组
  8. 第7章 面向对象编程(OOP) 《Kotin 编程思想·实战》
  9. cocos2d-x-3.1 win32程序-初识源代码(coco2d-x 学习笔记二)
  10. 玩转Android之在线视频播放控件Vitamio的使用