【PHP】最详细PHP从入门到精通(二)——PHP中的函数
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中的函数相关推荐
- 【PHP】最详细PHP从入门到精通(三)——PHP中的数组
PHP从入门到精通 之PHP中的数组 各位开发者朋友大家好,链接上次更新,我们PHP的学习也更深了一层,本次博主给大家带来PHP数组的数组实例详解的相关资料.数组分为数组数值数值,关联数组,多维数组 ...
- Simulink仿真入门到精通(十) S函数
Simulink仿真入门到精通(十) S函数 10.1. S函数的概述 10.2 S函数的类型 10.3 S函数的要素 10.4 S函数的组成及执行顺序 10.5 使用不同的语言编写S函数 10.5. ...
- Kali Linux 从入门到精通(二)-安装
Kali Linux 从入门到精通(二)-安装 Kail Linux 安装 持久加密USB安装-1 LUSK:Linux Unified Key Setup 磁盘分区加密规范 不依赖与操作系统的磁盘级 ...
- Mybatis从入门到精通二(入门详解)
Mybatis从入门到精通二(想学Mybatis,看了这一篇你就不需要其他的了) 本课程分为两天第一天的请参考: https://blog.csdn.net/weixin_43564627/artic ...
- java从入门到精通二十四(三层架构完成增删改查)
java从入门到精通二十四(三层架构完成增删改查) 前言 环境准备 创建web项目结构 导入依赖和配置文件 创建层次模型 实现查询 实现添加 实现修改 完成删除 做一个用户登录验证 会话技术 cook ...
- java从入门到精通二十三(Servlet)
java从入门到精通二十三(Servlet) Servlet 说明 Servlet初步入门尝试 Servlet生命周期 Servlet方法说明和体系结构 方法说明 体系结构说明 一些优化封装 urlP ...
- unity 5.x从入门到精通_Unity学习中值得收藏的学习资料(书籍)与博客
前言: 对于入门任何领域,收集相关比较优秀的学习资料,都是你不断提高自己的必备技能.而在信息爆炸的时代想要在繁杂的网络世界中找到好的学习资料,必然会耗费一定的时间和精力.为了给大家节省一点时间,在这里 ...
- Matlab从入门到精通-在线性代数中的应用(二):求解齐次线性方程组
前言 在 Matlab 中,函数 null 用来求解零空间,即满足 Ax=0 的解空间,实际上是求出解空间的一组基(基础解系). 以下是我为大家准备的几个精品专栏,喜欢的小伙伴可自行订阅,你的支持就是 ...
- MATLAB从入门到精通-Matlab R2020b中的新标记符号(New-marker-symbols)
Matlab R2020b中的新标记符号(New-marker-symbols)! MatlabR2020B版本引入了新的水平("_")和垂直("|")线标记符 ...
最新文章
- 取消水晶报表的数据库登录框 分享
- 第三十三讲:tapestry Ajax eventlink无刷新页面
- 微信短内容要来了!新功能已开启内测申请
- 18岁男子吸电子烟一年肺如70岁老人,怒诉电子烟公司
- 前端vue项目开发流程
- 聊聊拒绝忽悠的批判性思维
- VGA信号一些分辨率的参数(摘抄)
- 神经网络如何利用C语言实现动画?
- base64编码将字符串转换为图片
- 在ubuntu中运行qq
- 基于3D Vision眼镜的OSG立体显示
- 学堂云 意在象中-中国古典诗词鉴赏
- 宏观经济学 - 国民收入的决定:收入-支出模型
- 可以发送图片文件的php聊天室,基于 Swoole 开发实时在线聊天室(十四):发送图片消息...
- 前端自动化构建工具:用Gulp4.0搭建一个基本的前端开发环境
- 家谱mysql_mysql家谱表查询某人所有后代
- 数据库的列类型与字段属性
- IDE Eval Reset 插件安装使用
- 机器人3D模型可视化建模线上三维虚拟现实展示
- 证实!对华28nm以下大硅片出口管制已纳入瓦森纳协定