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 相关文章推荐
php从数组中随机抽取一些元素的代码
Nov 05 PHP
排序算法之PHP版快速排序、冒泡排序
Apr 09 PHP
PHP使用Mysql事务实例解析
Sep 08 PHP
试用php中oci8扩展
Jun 18 PHP
PHP使用array_merge重新排列数组下标的方法
Jul 22 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
May 16 PHP
使用Yii2实现主从数据库设置
Nov 20 PHP
PHP中静态变量的使用方法实例分析
Dec 01 PHP
Laravel框架用户登陆身份验证实现方法详解
Sep 14 PHP
PHP使用DOM对XML解析处理操作示例
Jul 04 PHP
laravel5.5添加echarts实现画图功能的方法
Oct 09 PHP
PHP实现单例模式建立数据库连接的方法分析
Feb 11 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
生成php程序的php代码
2008/04/07 PHP
关于PHP语言构造器介绍
2013/07/08 PHP
Yii2框架实现数据库常用操作总结
2017/02/08 PHP
php取出数组单个值的方法
2018/03/12 PHP
让广告代码不再影响你的网页加载速度
2006/07/07 Javascript
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
2010/03/05 Javascript
js图片延迟加载的实现方法及思路
2013/07/22 Javascript
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
2013/11/18 Javascript
JavaScript检查某个function是否是原生代码的方法
2014/08/20 Javascript
JavaScript中合并数组的N种方法
2014/09/16 Javascript
Jquery焦点图实例代码
2014/11/25 Javascript
Javascript基础教程之变量
2015/01/18 Javascript
JS仿Windows开机启动Loading进度条的方法
2015/02/26 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
2017/05/09 Javascript
jQuery+Ajax实现用户名重名实时检测
2017/06/01 jQuery
webpack打包单页面如何引用的js
2017/06/07 Javascript
vue.js组件之间传递数据的方法
2017/07/10 Javascript
代码详解JS操作剪贴板
2018/02/11 Javascript
bootstrap模态框弹出和隐藏,动态改变中间内容的实例
2018/08/10 Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
2019/08/29 Javascript
简单谈谈javascript高级特性
2019/09/04 Javascript
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
python3.0 模拟用户登录,三次错误锁定的实例
2017/11/02 Python
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
Python 堆叠柱状图绘制方法
2019/07/29 Python
浅谈matplotlib中FigureCanvasXAgg的用法
2020/06/16 Python
TensorFlow2.0使用keras训练模型的实现
2021/02/20 Python
DNA测试:Orig3n
2019/03/01 全球购物
美国知名眼镜网站:Target Optical
2020/04/04 全球购物
资生堂英国官网:Shiseido英国
2020/12/30 全球购物
传播学毕业生求职信
2013/10/11 职场文书
舞蹈教师自荐信
2014/01/27 职场文书
小学生环保演讲稿
2014/04/25 职场文书
《文化苦旅》读后感:阅读,让人诗意地栖居在大地上
2019/12/24 职场文书
pytorch通过训练结果的复现设置随机种子
2021/06/01 Python