PHP函数用法详解【初始化、嵌套、内置函数等】


Posted in PHP onJune 02, 2020

本文实例讲述了PHP函数用法。分享给大家供大家参考,具体如下:

初始函数

  • 函数:封装一段用于完成特定功能的代码。

  • 通俗理解函数:可以完成魔鬼工作的代码块,就像积木一样,可以反复使用,在使用的时候,拿来即用。

  • 函数定义:1)内置函数(字符串操作函数、数组操作函数)2)自定义函数

函数的基本语法格式

function 函数名([参数1.参数2,......]){
		函数体......
	}
  • 函数的定义由一下四部分组成:
    • 关键字function
      function: 在声明函数时必须使用的关键字;
    • 函数名functionName
      函数名: 要符合PHP的标识符,且函数名是唯一的,不区分大小写
    • 参数
      [参数1,参数2…]: 在外界传递给函数的值,他是可选的,多个参数之间使用逗号“,”分隔。
    • 函数体
      函数体: 函数定义的主体,专门用于实现特定的代码段。
      返回值: 需要使用return关键字将需要返回的数据传递给调用者。

参数设置

对于函数来说,参数的不同设置,决定了其调用和使用方式

  • 无参函数

    PHP函数用法详解【初始化、嵌套、内置函数等】


  • 按值传递参数
    PHP函数用法详解【初始化、嵌套、内置函数等】
    PHP默认支持按值传递参数,按此种方式定义的函数,在函数内部可以睡衣对用户传递的参数进行操作。


  • 引用传参
    PHP函数用法详解【初始化、嵌套、内置函数等】 在开发中,若需要函数修改它的参数值,则需要通过函数的引用传递。实现方式只需要在参数中前添加“&”符号即可。


  • 设置参数默认值
    PHP函数用法详解【初始化、嵌套、内置函数等】
    函数参数在设置时,还可以为其指定默认值,也就是可选参数。当调用者未传递该参数时,函数将使用默认值进行操作。
    当使用默认参数时,默认参数必须放在非默认参数的右侧,否则函数可能出错。
  • 指定参数类型(弱)
    PHP函数用法详解【初始化、嵌套、内置函数等】
    在PHP 7.0及以上的版本后,在自定义函数时,可以指定参数具体时那种数据类型
    当用户调用函数时,如果传递参数不是int类型。程序传递的参数不是int类型,程序会将其强制的转换为int型后,在进行操作,这种方式称为弱类型参数设置。
  • 指定参数类型(强)
    PHP函数用法详解【初始化、嵌套、内置函数等】
    除此之外,还可以将其设置为强类型的参数,即当用户传递的类型不符合函数的定义,程序会报错提醒。

变量的作用域

变量在定义后,默认情况下,可以在函数中使用,函数外不可以。

  • 变量只有在其作用范围内才可以被使用,这个作用范围称为变量的作用域。
  • 在函数中定义的变量称为局部变量
  • 在函数外定义的变量称为全局变量
function test (){
		$sum = 36; //局部变量
		return $sum;
}
$sum = 0;	//全局变量
echo text();	//输出结果:36
echo $sum;	//输出结构:0

那么如何在函数中使用全局变量呢?
答:参数传递,global关键字和超全局变量$GLOBALS。

$snap = 'nihao';
function abc(){
 global $snap;//全局变量的关键词,通常加在变量前。引用全局变量
 return $GLOBALS['snap'];//引用外部变量。定义全局变量
}
echo abc();

函数的嵌套调用

嵌套调用

函数的嵌套调用: 指的是在调用一个函数的过程中,调用另外一个函数,这种在函数内调用其它函数的方式称为嵌套调用。

递归调用

递归调用: 是函数嵌套调用中一种特殊的调用。它指的是一个函数在其函数体内调用自身的过程,这种函数成为递归函数

函数的高级应用

1. 静态变量

轻松得到函数被访问的次数,一是在函数中使用全局变量记录,缺点是全局变量可随时子啊函数外被改变,不能准确的记录;二是在函数中使用静态变量。
PHP函数用法详解【初始化、嵌套、内置函数等】

变量的作用域

  • 局部变量: 在函数的内部定义的变量,其作用域是所在函数
  • 全局变量: 被定义在所有函数以外的变量,其作用域是整个PHP文件,但在用户自定义函数内部是不可用的。如果希望在用户自定义函数内部使用全局变量。则要使用global关键字声明
  • 静态变量: 能够在函数调用结束后仍保留变量值,当再次回到其作用域时,又可以继续使用原来的值,而一般变量在函数调用结束后,其存储的数据值将被清除,所占的内存空间被释放。使用静态变量时,先要用static来声明变量,把关键字static放在要定义的变量之前。

2.可变函数

可变函数: 可变变量,他的实现是在一个变量前添加一个“¥符号”,就变成了另外一个变量。同理,可变函数的实现就是在一个变量名后添加一对圆括号“()”,让其变成一个函数的形式,然后PHP就寻找与变量值同名的函数,并且尝试执行它

3.回调函数

回调函数: 指的就是具有callable类型的函数,一般用作参数的传递。如PHP内置函数call_user_func()可以接受用户自定义的回调函数作为参数。

4. 匿名函数

匿名函数: 就是没有函数名称的函数,也称作闭包函数,经常用作回调函数参数的值。对于临时定义的函数,使用匿名函数无需考虑函数命名冲突的问题

php的内置函数

$url = 'C:\web\apache2.4\htdocs\cat.jpg';
$pos = strrpos($url, '\\');
// 截取文件名称,输出结果:cat.jpg
echo substr($url, $pos + 1);
// 截取文件所在的路径,输出结果:C:\web\apache2.4\htdocs
echo substr($url, 0, $pos);

strrpos()函数用于在$url中获取“\”最后一次出现的位置$pos。
substr()函数的第1个参数表示待截取的字符串,第2个参数表示开始截取的位置,非负数表示从字符串指定位置处截取,从0开始;负数表示从字符串尾部开始。第3个参数表示截取的长度。
substr()函数的第3个参数表示截取的长度,该长度的设置具体有以下4种情况。
省略第3个参数时,将返回从指定位置到字符串结尾的子字符串。
第3个参数为正数,返回的字符串将从指定位置开始,最多包含指定长度的字符,这取决于待截取字符串的长度。
第3个参数为负数,返回的字符串中在结尾处将有个指定长度的字符被省略。
第3个参数为0、false或null,将返回一个空字符串。
  • 替换指定位数的字符
    替换指定位数的字符,在开发也是很常见的功能。例如,在各种抽奖环节中,为了保证用户的隐私,出现的手机号一般使用“*”将第4至7位的数字进行覆盖
$tel = '18810881888';		 // 随意输入一串数字作为手机号
$len = 4; 			// 需要覆盖的手机号长度
$replace = str_repeat('*', $len); 	// 根据指定长度设置覆盖的字符串
echo substr_replace($tel, $replace, 3, $len);	// 输出结果: 188****1888

str_repeat()函数用于对“*”字符重复lensubstrreplace() len次。substr_replace()函数用于对字符串" role="presentation" style="position: relative;">len次。substrr​eplace()函数用于对字符串tel中第3个位置开始后的len使 len长度的字符使用" role="presentation" style="position: relative;">len长度的字符使用replace进行替换。

echo ceil(5.2);	// 输出结果:6
echo floor(7.8);	// 输出结果:7 
echo rand(1, 20);	// 随机输出1到20间的整数

ceil()函数是对浮点数5.2进行向上取整,
floor()函数是对浮点数进行向下取整,
rand()函数的参数表示随机数的范围,第1个参数表示最小值,第2参数表示最大值。

echo time();			// 输出结果:1487666317
echo mktime(0, 0, 0, 2, 21, 2017);	// 输出结果:1487606400
echo strtotime('2017-2-21');	// 输出结果:1487606400
echo microtime();			// 输出结果:0.04142600 1487666098
echo microtime(true);		// 输出结果:1487666098.0414

time()函数用于获取当前时间的Unix时间戳,
mktime()和strtotime()函数可将给定的日期时间转换成Unix时间戳,前者的参数分别表示“时分秒月日年”,后者可以是任意时间的字符串。
函数microtime()用于获取当前Unix时间戳和微秒数,不设置参数时,返回值的形式前面一段数字表示微妙数,后面一段数字表示秒数;设置参数时,小数点前表示秒数,小数点后表示微秒数。

格式化时间戳: 对于用户来说,时间戳的直接输出,会让其看到一个毫无意义的整型数值。为了将时间戳表示的时间以友好的形式显示出来,可以对时间戳进行格式化。

echo date('Y-m-d H:i:s');		// 输出结果:2017-02-21 16:48:16
echo date('Y-m-d', 1487666317);	// 输出结果:2017-02-21

date()函数第1个参数表示格式化日期时间的样式
date()函数第2个参数表示待格式化的时间戳,省略时表示格式化当前时间戳。
PHP函数用法详解【初始化、嵌套、内置函数等】
PHP函数用法详解【初始化、嵌套、内置函数等】

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
基于OpenCV的PHP图像人脸识别技术
Oct 11 PHP
php替换超长文本中的特殊字符的函数代码
May 22 PHP
PHP关联数组的10个操作技巧
Jan 21 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
Mar 18 PHP
PHP cURL初始化和执行方法入门级代码
May 28 PHP
php实现购物车功能(下)
Jan 05 PHP
php抽象方法和抽象类实例分析
Dec 07 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
Dec 09 PHP
PHP使用Redis替代文件存储Session的方法
Feb 15 PHP
php实现数组纵向转横向并过滤重复值的方法分析
May 29 PHP
php实现对文件压缩简单的方法
Sep 29 PHP
laravel 实现登陆后返回登陆前的页面方法
Oct 03 PHP
PHP与Web页面交互操作实例分析
Jun 02 #PHP
PHP Web表单生成器案例分析
Jun 02 #PHP
一文看懂PHP进程管理器php-fpm
Jun 01 #PHP
PHP论坛实现积分系统的思路代码详解
Jun 01 #PHP
PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】
May 29 #PHP
php使用自带dom扩展进行元素匹配的原理解析
May 29 #PHP
PHP实现本地图片转base64格式并上传
May 29 #PHP
You might like
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
PHP分页显示制作详细讲解
2006/12/05 PHP
thinkphp浏览历史功能实现方法
2014/10/29 PHP
PHP的拦截器实例分析
2014/11/03 PHP
使用PHP实现阻止用户上传成人照片或者裸照
2014/12/25 PHP
PHP针对JSON操作实例分析
2015/01/12 PHP
PHP的Yii框架中过滤器相关的使用总结
2016/03/29 PHP
laravel中命名路由的使用方法
2017/02/24 PHP
JS 时间显示效果代码
2009/08/23 Javascript
JavaScript 学习笔记(十五)
2010/01/28 Javascript
js function定义函数使用心得
2010/04/15 Javascript
jsp网页搜索结果中实现选中一行使其高亮
2014/02/17 Javascript
对比分析AngularJS中的$http.post与jQuery.post的区别
2015/02/27 Javascript
由浅入深剖析Angular表单验证
2016/07/14 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
2016/07/28 Javascript
Angularjs结合Bootstrap制作的一个TODO List
2016/08/18 Javascript
jQuery simpleModal插件的使用介绍
2016/08/30 Javascript
详细AngularJs4的图片剪裁组件的实例
2017/07/12 Javascript
详解Node项目部署到云服务器上
2017/07/12 Javascript
详解vue项目中使用token的身份验证的简单实践
2019/03/08 Javascript
javascript实现自由编辑图片代码详解
2019/06/21 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
Element图表初始大小及窗口自适应实现
2020/07/10 Javascript
解决VUE项目使用Element-ui 下拉组件的验证失效问题
2020/11/07 Javascript
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python3爬取淘宝信息代码分析
2018/02/10 Python
如何用Python破解wifi密码过程详解
2019/07/12 Python
在tensorflow中实现屏蔽输出的log信息
2020/02/04 Python
德国的大型美妆个护电商:Flaconi
2020/06/26 全球购物
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
2016/03/27 面试题
司机职责范本
2014/03/08 职场文书
个人综合鉴定材料
2014/05/23 职场文书
乡镇一岗双责责任书
2015/01/29 职场文书
仓库统计员岗位职责
2015/04/14 职场文书
微信小程序实现录音Record功能
2021/05/09 Javascript