一、自定义函数的基础
自定义函数是指程序员根据自身业务需要分装的,可以重复使用的代码段。
1. 优点:一次定义,可以多次使用。
定义方式:
function functionName ( ){
代码段;
}
functionName ( ) ; // 调用函数
2. 函数名称命名规则:
必须以字母或下划线为开头
函数名称必须必须遵守 ” 驼峰标记法 “ 。 //小骆驼
PHP中的所有函数都具有全局作用域。
PHP不支持函数重载,也不可能取消定义或者重定义已经声明的函数。
[ $ 变量名称 = ] functionName ( [ value , ... ] )
函数的执行结果,可以直接输出,可以将返回值赋给变量继续使用。
二、变量作用域
1. 局部变量:在函数内部中定义的变量,它的作用域是在函数定义范围内。
2. 全局变量:在函数外部定义的变量,在函数中使用时必须声明为 global 。
全局变量的作用域从定义处一直到文件的结尾。
使用$GLOBALS 替换 global 。
可以在函数体内改变变量的变量值。
3. 超全局变量:$GLOBALS为超全局变量。函数体内外都可直接调用。
$GLOBALS [ ' name ' ] ;
三、函数的参数
1. 通过参数可以传递信息到函数的内部
一个函数可以有零个或多个参数,多个参数之间用逗号作为分隔符。
参数的数据类型可以作为任意数据类型(资源除外)。
有些函数可以带有参数,但这个参数有可能会存在默认值。有默认值的参数称为可选参数,没有默认值的参数称为必选参数。
默认参数必须放在任何必选参数的右侧。因为参数在传递时,按照从左往右的顺序依传递,调用函数时,必选的参数一定要赋值,否则会报错。
2. 自定义函数的形参和实参
形参:在定义函数时的参数
实参:在调用时函数的参数
实参和形参在数量上、类型上、顺序上应严格一致。
function sun($var1,$var2 //形参){
return $var1 + $var2 ;
}
echo sum(3,5 //实参);
四、传递参数
1. 按值传递:直接传递参数值,也可以是变量。会在函数内部改变参数的值,但它并不会改变函数外部的值。
$a = ' imooc ' ; 将$a传递给$b $b = $a ; 当$b的值改变时 $b = ' hello ' ; $a是不会发生改变 $a = ' imooc '。
2. 引用传值:引用传值必须在参数的前面加上&符号。
引用传值的参数值只能是变量
引用传值会改变函数外部的值
引用指向原始变量
$foo = ' bob ' ; $bar = &$foo ;
$bar:理解为$foo的别名,与$foo指向同一个空间,修改任意一个变量,引向的变量值也会改变。
示例1:
$foo = ' mooc ' ;
$bar = &$bar ;
unset ( $foo ) ; 销毁变量,并没有销毁mooc,还有另一个变量指向mooc 。
echo $bar ; 输出为mooc
示例2:
下面这种传值方式是:按值传递,只影响函数内部的值。
function fun1( $n ) {
$n++ ; //局部变量
}
$n = 3 ; //全局变量
fun1 ( $n ); //此时参数为$n的时候,外部$n的值跟内部$n一起变化。
echo $n ;
注意:函数内部的$n是一个局部变量,外部的$n是局部变量,他们相互独立,并不指向同一块内存。
总结:1.引用复制实质上是指将变量的空间地址赋给另一个变量。如此,两个变量指向了同一块地址空间,对两个变量的操作都是是对这块空间的操作。
示例3:
$a = ' imooc ' ;
$b = &$b ;
$b ---- xxx(按xxx寻址,最终指向$a的空间)---- imooc ---- $a
$a是通过地址路径xxx找到imooc ,$a ,$b 操作的都是同一块空间。
五、可变数量的参数
可变数量是指参数的数目是不定的,PHP的自定义函数中支持可变数量的参数。
在PHP5.5及更早的版本中,使用函数func_num_args( ) , func_get_arg( ) , 和 func_get_args( ) 实现。
在PHP5.6及以上的版本中,由。。。语法实现;
func_get_arg( ) 获取传递给函数的参数列表的某一项
func_get_args( ) 获取一个包含传递给函数的参数列表的数组
func_num_args( ) 获取传递给函数的可变参数数量
array_sum( ) 对数组中的所有值求和
六、 自定义函数的返回值
1. return语句将立即中止函数的运行,并且将控制权交回调用该函数的代码段
function fun1( ) {
retrun ' hello ' ; // 返回Hello 给 fun1 ()
}
echo fun1 ( ) ; //输出fun1 函数的返回值
2. 如果省略return语句,则返回值为NULL
3. 返回值可以是包括数组和对象的任意类型(资源除外)
4. 函数的返回值只能有一个
领取专属 10元无门槛券
私享最新 技术干货