回顾
运算符:算术,比较,逻辑,赋值,三目,错误抑制,位运算(三码),自操作,字符串
执行结构:顺序,分支(if和switch),循环(for,while,do-while,foreach)
函数:自定义函数(函数名,参数(形参,实参),函数体,返回值)
自定义函数
返回值
返回值指的当函数调用结束以后,该函数给外部调用处返回一些列的数据(数据类型任意:八个数据类型)
如果函数没有任何返回值,可以理解为函数返回的是NULL。
PHP中函数可以没有返回值。
参数传值
传值方式:值传递(默认的)和引用传递
值传递:将实参复制一份,传递给形参(形参与外部实参变量没有关系),值传递可以通过在调用函数的时候直接使用数据常量。
引用传递:形参是获得实参所指向的数据的内存地址,形参与实参共同指向同一个内存地址。
引用传递
引用传递语法:在定义函数的时候,给形参使用地址符号&,调用引用传递的函数的时候,必须使用变量(实参必须是变量:不能是数据常量)传递。
引用传递不能使用数据常量
内存分析
特别注意:引用传值只能使用变量传数据。
参数作用
将函数外部的数据传入到函数内部供其使用
作用域
作用域概念
1. 什么是作用域?
作用域指的就是变量所能使用的范围。
作用域分为两类:全局作用域和局部作用域。
2. 全局作用域和局部作用域定义?
全局作用域
只要在函数外部定义的变量都是全局作用域
局部作用域
在函数内部定义的变量称之为局部作用域
3. 全局作用域和局部作用域功能?
局部作用域的变量只能在函数的内部使用,函数外部不能使用。
全局作用域:
JS中:全局作用域的变量可以在函数的内外都使用
PHP中:全局作用域只能在函数外部使用
作用域证明
跨域使用变量
想要在函数的内部使用全局变量,在函数的外部使用局部变量。
局部使用全局作用域
方案一:
让函数在定义的时候采用引用传值。
方案二:
使用系统预定义超全局变量$GLOBALS,该变量保存了所有的全局变量。
全局使用局部作用域
方案一
让函数在定义的时候采用引用传值。
方案二
返回值:将内部数据(局部变量)作为返回值。
方案三
使用global关键字:将局部变量全局化(在创建局部变量的同时,创建全局变量:当前全局变量不存在,如果存在就会产生引用)
引用全局变量
创建全局变量
内存分析1:引用全局变量
内存分析2:创建全局变量
参数默认值
在定义函数的时候,给形参指定默认值,在进行函数调用的时候,可以不给有默认值的参数传递实参。
语法:形参 = 默认值
注意:如果一个参数列表中存在有默认值的参数,那么该参数必须在最右边(后面)
静态变量
1. 什么是静态变量?
在函数内部使用static关键字修饰的变量,函数在多次调用的时候能够共同使用该变量(跨函数共享变量)
内存分析
匿名函数
没有函数名的函数叫匿名函数。
语法
变量 = function(参数列表){
//函数体
//返回值
}; //整体是赋值语句,所以需要语句结束符
匿名函数的使用
因为变量保存了函数的地址,所以必须通过变量来找到函数。系统要识别函数,只认括号,需要给变量增加一个括号来告诉系统当做函数处理。
匿名函数的使用
匿名函数通常用于做别的函数的参数:回调函数
伪类型
指的是定义好的函数,需要指定的数据类型作为参数或者返回值,是一种对用户的帮助。
mixed:数据类型有很多种,不具体限制
number:数字类型:整型和浮点型
callback:回调函数,指的需要一个可以被执行的函数的名字字符串。
void:null,不需要参数或者没有返回值
可变函数
可以变化的函数,函数名字是一个变量的值,可以通过变量直接访问函数。