函数:function,是一种语法结构,将实现某一个功能的代码块(多行代码)封装到一个结构中,从而实现代码的重复利用()复用
函数有几个对应的关键点:function 关键字、函数名、参数(形参和实参)、函数体和返回值
//基本语法如下:
function 函数名([参数]){
//函数体
//返回值:return 结果
}
//调用函数
函数名(要传的参数);
定义函数的意义:是为了实现代码的重复利用,一个功能一个函数(简单明了)
函数的调用特点:只要系统在内存中能够找到对应的函数,就可以执行(函数可以在函数定义之前)
函数执行的内存分析:
读取代码进入到代码段(编译:将代码编程字节码存储到内存)
根据代码逐行执行
以上的原因:编译和执行是分开的(先编译后执行)
注意:函数是在代码执行阶段,碰到函数名的时候才会调用,不是在编译阶段
命名规范:由字母、数字和下划线组成,但是不能以数字开头
函数作为一种常用的结构,一般遵循以下规则:函数通常名字名字代表这函数的功能,而有些功能会比较复杂,可能一个旦辞不足以表达,需要多个单词组合
函数名字:在一个脚本周期中,不允许出现同名函数(通常在一个系统开发中都不会使用同名函数)
参数分两种:形参和实参
形参:形式参数,不具有实际意义的参数,是在函数定义时使用的参数
实参:实际参数,具有实际数据意义的参数,是在函数调用时使用的参数
形参是实参的载体:实参在调用时通常是需要传入到函数内部参与计算(运算),那么需要在函数内部去找到实际数据所在的位置才能找到数据本身;需要实际调用的时候,将数据以实参的形式传递给形参;给形参赋值,从而使得函数内部可以用到外部数据
注意:
默认值
指的是形参的默认值,在函数定义的时候,就给形参进行一个初始赋值,如果实际调用传入的参数没有提供,那么形参就会使用定义时的值进如函数内部运算。
通常默认值是用在一些一定会有某个数据参与,但是可能通常是某个我们知道的值。
注意事项:函数外部定义的变量名字与函数定义的形参名字冲突(同名)是没有任何关联关系的;如果多个函数使用同样的形参名字也不冲突。
实参在调用时会将值赋值给形参,那么实际上使用的方式就是一种简单的值传递:将实参(如果时变量或者常量或者其他表达式)的结果(值)取出来赋值给形参形参与外部实际传入的参数本身没有任何关联关系;只是结果一样。
有的时候,希望在函数内部拿到外部数据,能够在函数内部改变,那么就需要明确告知函数(定义时),函数才会在调用的时候去主动获取外部数据的内存地址。以上这种定义形式参数的方式叫做引用传值
//基本语法
function 函数名(形参1,&形参2){
//函数体;
}
//在调用的时候,必须给引用传值的参数位置传入实际参数,而且参数本身必须是变量。(变量才有指向的数据的内存地址)
函数内部(大括号{}里面)的所有代码都称之为函数体
基本上所有的代码都可以实现
关键词:return,指的是将函数实现的结果,通过return关键字,返回给函数外部(函数调用处);在PHP中所有的函数都有返回值。(如果没有明确return使用,那么系统默认返回null)
返回值作用:将计算结果返回给调用处
注意:函数返回值可以是任意数据类型
return关键字:
变量(常量)能够被访问的区域
严格来说有三种作用域:
全局变量:就是用户普通定义的变量(函数外部定义)
所属全局空间:在PHP中只允许在全局空间使用:理论上函数内部不可方法
脚本周期:直到脚本运行结束(最后一行代码执行完)
局部变量:就是在函数内部定义的变量
所属当前函数空间:在PHP中只允许在当前函数自己内部使用
函数周期:函数执行结束(函数是在栈区中开辟独立内存空间运行)
超全局变量:系统定义的变量(预定义变量:$_SERVER)
所属超全局空间:没有访问限制(函数内外都可以访问)
超全局变量会将全局变量自动纳入到$GLOBALS里面,而GLOBALS没有作用域限制,所以能够帮助局部去访问全局变量:但是必须使用数组方式
如果想函数内部使用外部变量:除了$GLOBALS之外,通过参数传值(或引用传值)
在PHP中,其实还有一种方式,能够实现全局访问局部,同时局部也可以访问全局:global关键字
global关键字:是一种在函数里面定义变量的一种方式
以上方式可以实现局部与全局的互访,但是通常不会这么用。一般如果会存在特殊使用,也会使用参数的形式来访问。(还可以使用常量:define定义的)
static,是在函数内部定义的变量,使用static关键字修饰,用来实现跨函数共享数据的变量
静态变量的使用
当前有一个变量所保存到值,刚好是一个函数的名字,那么就可以使用变量+()来充当函数名使用
可变函数在系统使用的过程中还是比较多的,尤其是使用很多系统函数的时候:需要用户在外部定义一个自定义函数,但是是需要传入到系统函数内部使用
没有名字的函数
//基本语法
变量名 = function(){
函数体
}
变量保存匿名函数,本质得到的是一个对象
闭包:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)
原文:https://www.cnblogs.com/Joshua-Zhang/p/12242978.html