IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP学习(4) -> 正文阅读

[PHP知识库]PHP学习(4)

- 函数

- 函数基本概念:

函数:function,是一种语法结构,将实现某一个功能的代码块(多行代码)封装到一个结构中,从而实现代码的重复利用(复用)

- 函数的定义语法:?

一.函数有几个对应的关键点:function关键字、函数名、参数(形参和实参)、函数体和返回值

二.基本语法如下:

function函数名([参数:可有可无的]){

????????????????//函数体

//返回值:return 结果

}

三.定义函数的目的:实现代码的重复利用,一个功能一个函数(简单明了)

没有报错,是正确的

四.函数的使用

通过访问函数的名字+(); //如果函数在定义的过程中有参数,那么在调用的时候就必须传入对应的参数【函数是一种结构,不会自动运行,必须通过调用才会执行】

函数是在代码执行阶段,碰到函数名字才会调用,不是在编译阶段

五.函数的调用特点:

只要系统在内存中能够找到对应的函数,就可以执行(函数的调用可以在函数定义之前)?

函数执行的内存分析:

1.读取代码进入到代码段(编译:将代码编成字节码存储到内存)

2.根据代码逐行执行

以上原因:编译和执行是分开的(先编译后执行)

? - 函数命名规范

命名规范:由字母、数字、下划线组成,但是不能以数字开头

函数作为一种常用的结构,一般遵循以下规则:(通常名字代表着函数的功能,而有些功能比较复杂,可能一个单词不足以表达,需要多个组合)

????????1.驼峰法:除了左边第一个单词外,后面所有的单词首字母都大写showParentInfo()

????????2,下划线法:单词之间通过下划线连接,单词都是小写,show_parent_info()

函数名字:在一个脚本周期中,不允许出现同名函数(通常在一个系统开发中都不会使用同名函数)

? - 参数详解

函数的参数分为两种:形参和实参

? - 形参

形参:形式参数,不具有实际意义的参数,是在函数定义时使用的参数

? - 实参

实参:实际参数,具有实际数据意义的参数,是在函数调用时使用的参数

形参是实参的载体:实参在调用时通常是需要传到函数内部参与计算,那么需要在函数内部去找到实际数据所在的位置才能找到数据本身:需要实际调用的时候将数据以实参的形式传递给形参:给形参赋值从而使得函数内部可以用到外部数据

执行步骤:

1.系统调用add函数:去内存中寻找是否有add函数:有

2.系统会在栈区开辟内存空间运行函数add

3.系统会查看函数本身是否有形参:有,两个

4.系统会判断调用的时候是否有实参:有,两个

5.系统默认会将实参的值$num,20取出,顺序赋给形参$arg1和$arg2

6.执行函数体:运行

7.返回函数执行(返回值)

注:

1.在PHP中允许实参多于形参(个数):函数内部不用而已

2.在PHP中理论上形参个数没有限制(实际开发不会太多)

3.实参不能少于形参个数

? - 默认值

默认值:default value,指的是形参的默认值,在函数定义的时候,就给形参进行一个初始赋值:如果实际调用传入的参数(实参)没有提供,那么形参就会使用定义时的值来进入函数内部参与运算

通常默认值是用在一些,一定会有某个数据参与,但可能通常是我们知道的值

理解一下jian($num1):对于jian函数来说括号里的$num1是个实参,这个实参的值是外部定义的10?,就相当于把10传给jian内部的$num1(两个变量是独立的)

注意事项:

1.默认值的定义是放在最后边的(多个),不能左边的形参有而右边的没有默认值

2.函数外部定义的变量名字与函数定义的形参名字冲突(同名)是没有任何关联的;如果多个函数使用同样的形参名字也不冲突

? - 引用传递

实参在调用时会将值赋值给形参,实际上使用的一种方法就是简单的值传递:将实参(如果是变量、常量、其他表达式)的结果(值)取出来赋值给形参:形参与外部实际传入的参数本身没有任何关系,只是结果一样

有的时候希望在函数内部拿到外部的数据,能够在函数内部改变,那么就需要明确告知函数(定义时),函数才会在调用的时候去主动获取外部的数据的内存地址。以上这种定义形式参数的方式叫做引用传值

基本定义语法:

function 函数名(形参1,&形参2){

? ? ? ? ? ? ? ? //函数体

}

在调用的时候,必须给引用传值的参数位置传入实际参数,而且参数本身必须是变量(变量才有指向数据的内存地址)

解释第二个(echo $a和$b): 函数在定义的时候,对应的b形参采用的是取地址:所以在实参传入后,系统取到了外部变量b的内存地址,而a取得是值,因此改变之后:a只改变了函数内部的自己,b改变了自己的同时也改变了外部

注意事项:在传入实参的时候必须传入变量(错误调用:直接传入数值)

? - 函数体

函数体:函数内部(大括号{}里面)的所有代码都称之为函数体,基本上所有的代码都可以实现:

1.定义变量

2.定义常量

3.使用流程控制(分支、循环)

4.可以调用函数

函数返回值

返回值:return,指的是将函数实现的结果,通过return关键字,返回给函数外部(函数调用处):在PHP中所有函数都有返回值(如果没有明确return使用,那么系统默认返回NULL)

返回值作用:计算结果返回给调用处

注意:函数的返回值可以是任意的数据类型

return关键字:

1.return在函数内部存在的价值:返回当前函数的结果(当前函数运行结束:若return后面还有函数体也不输出)

2.return还可以在文件中直接使用(不在函数里面):代表文件将结果return后面的内容,转交给包含当前文件的位置(通常在系统配置文件中使用较多),在文件中也代表着终止文件后面的代码,return之后的代码不会执行

? - 作用域

作用域:变量(常量)能够被访问的区域

1.变量可以在普通代码中定义

2.变量也可以在函数内部定义

在PHP中作用域严格来说分为两种,但是PHP内部还定义一些在严格意义之外的一种,所以总共算三种:

1.全局变量:就是用户普通定义的变量(函数外部定义)

? ? ? ? 所属全局空间:在PHP中只允许在全局空间使用,理论上函数内部不可访问

? ? ? ? 脚本周期:直到脚本运行结束(最后一行代码执行完)

2.局部变量:在函数内部定义的变量

? ? ? ? 所属当前函数空间:在PHP中只允许在当前函数自己内部使用

? ? ? ? 函数周期:函数执行结束(函数是在栈区中开辟独立内存空间运行)

3.超全局变量:系统定义的变量(预定义变量:$_SERVER、$POST等)

? ? ? ? 所属超全局空间:没有访问限制(函数内外部都可以访问)

【超全局变量会将全局变量自动纳入$GLOBALS里面,而$GLOBALS没有作用域限制,所以能够帮助局部去访问全局变量,但必须使用数组方式】

如果想函数内部使用外部变量:除了$GLOBALS之外,通过参数传值

在PHP中,其实还有一种方式,能够实现全局访问局部,同时局部也可以访问全局:global关键字

GLOBAL关键字:是一种在函数里面定义变量的一种方式:

1.如果使用global定义的变量名在外部存在(全局变量),那么系统在函数内部定义的变量直接指向外部全局变量所指向的内存空间(同一个变量)

2.如果使用global定义的变量名在外部不存在(全局变量),系统会自动在全局空间(外部)定义一个与局部变量同名的全局变量

本质的形式:在函数内部和外部,对一个同名变量(全局和局部)使用同一块内存地址存储数据,从而实现共同拥有

基本语法:

Global 变量名;? ? ? ? //不能赋值

变量名 = 值;? ? ? ? //修改

虽然以上方式可以实现全局与局部的互访,但是一般不这么用。一般如果存在特殊使用,也会使用参数的形式来访问(还可以使用常量:define定义的)?

? - 静态变量

静态变量:static,在函数内部定义的变量,使用static关键字修饰,用来实现跨函数共享数据的变量:函数运行结束所有局部变量都会清空,如果重新运行一下函数,所有的局部变量又会重新初始化

基本语法:

function 函数名(){

? ? ? ? //定义变量

? ? ? ? static $函数名 = 值;

}

静态变量的作用是为了跨函数共享数据(同一个函数被多次调用)

静态变量的原理:系统在进行编译时会对static进行初始化:为静态变量赋值

函数在调用的时候,会自动跳过static关键字这一行

静态变量的使用:

1.为了统计:当前函数被调用的次数

2.为了统筹函数多次调用得到的不同结果(递归思想)

? - 可变函数?

可变函数:当前有一个变量保存的值,刚好是一个函数的名字,就可以使用变量+()来充当函数名使用

可变函数在系统使用的过程中还是比较多的,尤其是使用很多系统函数的时候:需要用户在外部定义一个自定义函数,但是需要传到系统函数内部使用

将一个用户函数传入给另一个函数(函数名)去使用的过程,称为回调过程,而被传入的函数被称为回调函数

? - 匿名函数?

匿名函数:没有名字的函数

基本语法:

变量名 = function (){

? ? ? ? 函数体

};

变量保存匿名函数,本质得到的是一个对象(closure)

? - 闭包?

闭包:closure,来源于以下两种的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)

简单理解:函数内部有一些局部变量(要执行的代码块)在函数执行之后没有被释放,是因为在函数内部还有对应的函数在引用(函数的内部函数:匿名函数)

?这个地方echo $name;是用不了的,因为$name属于别的函数了,对于innerfunction而言$name属于全局变量

证明:函数的局部变量在函数使用完以后没有被释放

1.使用内部匿名函数

2.匿名函数使用全局变量use

3.匿名函数被返回给外部使用

? - 伪类型?

伪类型:假类型,实际上在PHP中不存在的类型,但是通过伪类型可以帮助程序员去更好的查看操作手册从而学习更方便

伪类型主要有两种:在三大类八小类之外

Mixed:混合的,可以是多种PHP中的数据类型

Number:数值的,可以是任意数值类型(整形和浮点型)

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-01-24 10:36:11  更:2022-01-24 10:37:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:40:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码