0

0

PHP基础教程五之函数

黄舟

黄舟

发布时间:2017-03-01 09:38:51

|

1261人浏览过

|

来源于php中文网

原创


本节讲解的内容

  • 函数的概念

  • 函数的分类

  • 函数的变量问题

  • 函数的参数讨论

  • 内部函数

    立即学习PHP免费学习笔记(深入)”;

  • 可变函数

  • 匿名函数

  • 函数的递归调用

前言

在PHP开发中,我们有时候会使用到大量的函数,那什么是函数,作用又是什么?函数的出现可以说初次引出了封装的概念,函数的使用可以使我们的代码不那么冗余,同时函数的定义可以上我们快速的滤清思路。提高代码的复用性,同时有利于模块化编程。

函数的概念

当我们在编程中,有这样一个需求,需要对一个功能进行统一的整合,以便于在别的地方使用这个功能的时候不用在编写一次(减少冗余性),只需要调用特定的代码就能实现。用现成的技术,我们很难实现这种需求,这时就需要使用到函数这个知识。

函数:为完成某一功能的程序指令(语句)的集合,一般一个函数最好只完成一个功能,降低代码的耦合度。

有时候我们把函数称之为方法,它们两个是一个概念。

函数的分类

几乎每种编程语言的函数都分为两种:

  • 自定义函数

  • 系统函数

自定义函数:
自定义函数就是我们自己根据自己的具体需求自己定义的函数,函数中的功能需要自己去实现。

自定义函数的语法规则:

function 方法名(形参列表){
    实现某种功能的代码;
    return 返回值(可以没有返回值,这个看需求)
}

解释:

  1. function是一个关键字,如果想定义一个函数必须写function

  2. 方法名是自己定义的,这个名字你可以随意起,但是一般我们应该起有意义的名字,比如说这个函数要实现什么功能的缩写。

  3. 形参列表,当我们调用函数的时候,有时候需要传递给函数一些参数(也就是变量),在函数中进行操作,这个形参列表就是接受我们调用时传过来的参数,当然可以有多个。

  4. 在PHP中函数体是需要大括号包裹起来的,里面写我们的代码。

  5. return就是返回的意思,当我们调用函数后,有时候需要函数向我们返回一个结果,比如函数的功能是计算两个数的和,这时候当函数通过进行加法运算后,我们可以写return返回计算后的结果,当然有没有返回值需要看函数的具体功能是什么,需不需要返回结果。

函数名的命名规则:
函数名和 PHP 中的其它标识符命名规则相同。有效的函数名以字母或下划线打头,后面跟字母,数字或下划线。
我们在写函数是一般的命名规范是驼峰式命名法,也就是第二个单词的首字母大写。

示例:

系统函数:

系统函数就是也是函数的一种,是系统已经封装好的函数,系统函数有好多,不同的函数有不同的功能,我们可以根据自己的需求选取不同的函数。

在帮助文档中我们可以查询到我们经常使用的数学函数:

  1. abs — 绝对值

  2. ceil — 进一法取整

  3. decbin — 十进制转换为二进制

  4. dechex — 十进制转换为十六进制

  5. decoct — 十进制转换为八进制

  6. max — 找出最大值

  7. min — 找出最小值

  8. pow — 指数表达式

  9. rand — 产生一个随机整数

  10. round — 对浮点数进行四舍五入

  11. sqrt — 平方根

向我们有时使用的var_dump()输出类型就是系统函数。

系统函数使用到的时候可以查看帮助文档。

函数的变量问题

全局变量和局部变量

局部变量:

在函数中我们在处理数据中,可能会定义一些变量,这些在函数中定义的变量我们称之为局部变量,局部:顾名思义,就是在函数中使用的变量。

可以看到当尝试在函数外使用函数内的变量的时候,就会报错。

齐博B2B电子商务系统
齐博B2B电子商务系统

齐博B2B系统是一款基于PHP程序和Mysql数据库为基础的开源B2B行业门户电子商务网站建站系统, 系统代码完整、开源,功能全面,架构优秀,提供良好的用户体验、及管理平台,是目前搭建B2B行业门户网站最好的程序之一。齐博B2B具有的功能特点包括:通行证整合功能通过通行证的整合,可以与流行的PHPWIND论坛或Discuz论坛以及Ucenter中心等进行通讯,从而为用户提供更多的交流场所,增加网站

下载

全局变量:

在上面的代码中我们可以看到在函数外,我们定义两个变量,

b,这种在函数外定义的变量我们称之为全局变量。那么全局变量能不能再函数内使用呢?

可以看到,在函数内使用函数外的全局变量时,提示错误。

全局变量称为全局,那怎么在函数内使用呢?答案很简单,只需要在函数中用关键字声明一下就行了。

在函数中利用global这个关键字进行声明,便是需要使用全局变量$a,在这里不得不说一下函数的调用在内存中的变化。

函数的调用过程大致图:
这里写图片描述

我们的代码都是在栈(也就是内存中)中运行的。在栈中通过一行行的执行代码,进行解析,在运行的时候有一个存放我们数据的区域,叫数据区。当定义变量的时候,在数据区就会生成一个数据区,存放自己定义的变量。

当代码执行到调用函数的时候,系统就会在栈中重新开辟一个栈区,并在这个新栈中执行函数(每执行一个函数就会开辟一个新栈),当在函数中创建对象的时候,就会在数据区重新定义一个区域用来存放函数中的变量。这就是在函数外不能使用函数内变量的原因。它们两个是两个不同的区域。

但是当我们声明了global的时候,系统就不会在函数自己的数据区建立一个变量,而是会去函数外部的数据区,尝试寻找用global定义的变量。但是当外部的数据区没有我们用global定义的变量的时候,就会自动的在外部的数据区定义一个变量,使其成为全局变量。

上面的$a在外部没有定义

函数的参数讨论

我们在调用函数的时候经常会去传过去参数,而在函数上我们也定义了参数进行接受。调用函数时传的参数称为实际参数(实参),而函数接受的参数称为形式参数(形参),它两个是没有影响的,定义时名字一样也是可以的,但是一定要对应,不能出现调用时传过去两个参数,接收时一个参数。

函数的参数是允许有默认值的,也就是当我们没有传过去数值时,它使用默认值,但是当我们传过去有值的时候,使用我们传过去的值。

使用默认的:

可以看到它并没有报错,同时$oper使用了默认的值+;

使用传过去的:

参数的值传递和引用传递

在函数的调用中,参数的传递有两种方式:

  • 值传递

  • 引用传递

值传递

当我们在调用函数,传递参数后在函数中进行修改,而在函数外再次使用,还是修改前的值,可以看代码:

这种传递方式我们为值传递,默认情况下,函数参数通过值传递(因而即使在函数内部改变参数的值,它并不会改变函数外部的值)。如果希望允许函数修改它的参数值,必须通过引用传递参数。

引用参数

有时我们希望我们传进去的值,在没有返回的情况下,直接进行修改,这是就需要用到引用传递。

在上面的代码中只是在函数中添加了一个取地址符&,学过C语言的都知道,在C语言中使用&直接进行地址的传递。这就表示它在函数中的数据,会指向外边的变量。
这里写图片描述

内部函数

内部函数: 函数内部可以申明函数,供函数内部使用,称为内部函数
,比如某位程序员为防止他人调用,可以使用内部函数。

其实内部函数也是可以在函数外边使用的,就像上面的代码, 如果我们没有执行 calcuator, 就去调用内部函数 sum() ,就会报错。但是如果我们执行过 calculator 则,我们也可以使用内部函数了.

当调用过calcuator,可以理解为内存中有函数内的这两个函数,然后接着调用函数内的函数,就不会出错。

可变函数

可变函数: PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。

看代码可以比较清晰的理解什么是可变函数。

我们在回调函数中会使用到这种方式。
案列:

在上面把一个函数的名字当成变量进行传递。

匿名函数

匿名函数: 匿名函数,也叫闭包函数,允许临时创建一个没有指定名称的函数。最经常用作回调函数参数的值。当然,也有其它应用的情况. 简单的理解就是 匿名函数就是没有名字的函数。

回调函数

上面的代码其实也是一个回调函数。匿名函数当作回调函数来调用。

回调函数简单的理解是:你调用了某个函数,而这个函数(A)内又会调用一个由你实现的另一个函数(B),那么这个另一个函数(B)就是所谓的回调函数,所以,一般来说,你只是不直接去调用罢了。

函数的递归调用

递归直白的说就是自己调用自己,比如函数自己调用自己,递归是一种算法,它的专业说法是:

递归通过把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大的减少了程序的代码量。

我们在这里只是简单的讨论一下,不做过多的深入。

示例:

 2){
        abc(--$n); //进行自己调用自己。
    }
    echo '$n的值是' . $n . '
'; } abc(4); .....结果..... 2 2 3

看到结果可能一时没有反应过来。但是如果画图就好理解了。
这里写图片描述

函数的递归需要满足几个条件:
- 基准情形。必须总要有某些基准条件,它无需递归就能解出
- 不断推进。对于那些需要递归的求解的情形,每一次递归调用都必须要使状况朝向一种基准情形推进

总结

上面的讲解的基本上是函数的基本应用,想要熟悉的掌握函数的应用,只用多练,多想。同时,不知道有没有发现,本节的函数都是写在一个文件里面的,但是有时我们写的函数是在另外一个文件,这时就不能再另外一个文件直接使用,上面的所有功能都不能使用,作为PHP程序员,你必须要知道,必然有一种方法能解决这种问题,恩,确实能解决,include和require。

 以上就是PHP基础教程五之函数的内容,更多相关内容请关注PHP中文网(www.php.cn)!

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

7

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

2

2026.01.21

无人机驾驶证报考 uom民用无人机综合管理平台官网
无人机驾驶证报考 uom民用无人机综合管理平台官网

无人机驾驶证(CAAC执照)报考需年满16周岁,初中以上学历,身体健康(矫正视力1.0以上,无严重疾病),且无犯罪记录。个人需通过民航局授权的训练机构报名,经理论(法规、原理)、模拟飞行、实操(GPS/姿态模式)及地面站训练后考试合格,通常15-25天拿证。

13

2026.01.21

Python多线程合集
Python多线程合集

本专题整合了Python多线程相关教程,阅读专题下面的文章了解更多详细内容。

1

2026.01.21

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

2

2026.01.21

windows激活码分享 windows一键激活教程指南
windows激活码分享 windows一键激活教程指南

Windows 10/11一键激活可以通过PowerShell脚本或KMS工具实现永久或长期激活。最推荐的简便方法是打开PowerShell(管理员),运行 irm https://get.activated.win | iex 脚本,按提示选择数字激活(选项1)。其他方法包括使用HEU KMS Activator工具进行智能激活。

2

2026.01.21

excel表格操作技巧大全 表格制作excel教程
excel表格操作技巧大全 表格制作excel教程

Excel表格操作的核心技巧在于 熟练使用快捷键、数据处理函数及视图工具,如Ctrl+C/V(复制粘贴)、Alt+=(自动求和)、条件格式、数据验证及数据透视表。掌握这些可大幅提升数据分析与办公效率,实现快速录入、查找、筛选和汇总。

6

2026.01.21

毒蘑菇显卡测试网站入口 毒蘑菇测试官网volumeshader_bm
毒蘑菇显卡测试网站入口 毒蘑菇测试官网volumeshader_bm

毒蘑菇VOLUMESHADER_BM测试网站网址为https://toolwa.com/vsbm/,该平台基于WebGL技术通过渲染高复杂度三维分形图形评估设备图形处理能力,用户可通过拖动彩色物体观察画面流畅度判断GPU与CPU协同性能;测试兼容多种设备,但中低端手机易卡顿或崩溃,高端机型可能因发热降频影响表现,桌面端需启用独立显卡并使用支持WebGL的主流浏览器以确保准确结果

10

2026.01.21

github中文官网入口 github中文版官网网页进入
github中文官网入口 github中文版官网网页进入

github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

7

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.9万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 8.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号