Day5:函数
一、函数
1、定义:完成指定任务并且已经命名的代码块,可以用来重复使用,一段代码如果调用2次以上,通常我们就定义成函数
2、作用:
(1)容易维护
(2)代码不冗余,能够提高代码的重用性
3、函数的种类
(1)系统函数,系统已经提供了一些函数
(2)自定义函数
4、定义:
(1)将你要写的代码写出来
(2)将代码用大括号包起来
(3)使用关键字funciton 函数名()来声明这个函数
5、注意:
(1)函数名必须有意义
(2)函数名不能使用纯数字
(3)函数的名字不区分大小写
(4)函数名不能使用系统函数名,必须唯一
6、函数调用:
(1)函数不调用不执行
(2)函数名()
(3)函数的调用,可以放在函数声明的前面,也可以是后面,因为代码放在内存的代码段中,在执行代码之前已经被放在内存中了
7、自定义函数的参数
(1)形参:形式上的参数,在定义函数时提供的参数
(2)实参:实际的参数,在调用的时候括号里面写的参数
注意:
(1)形参和实参可以有多个,之间用逗号分隔
(2)形参和实参的个数应该对应上
(3)默认参数:如果在使用函数时,没有填写指定数量的实参会报错,但是我们可以在声明形参的同时给它默认值
注意:
(1)当形参中有默认值,而且实参中也有值了,那么实参的值会覆盖形参的值
(2)可以给定部分参数,部分参数也有默认值,但是尽量放到后面,因为参数传值是一一对应的
(3)函数中不给形参参数默认值的,必须在调用的时候给实参
(4)函数中不给参数默认值的叫必选参数
(5)函数中给参数默认值的叫可选参数
function mytable($hang=1,$lie=5){ }
8、变长参数列表
func_get_args():获得函数中所有参数的集合
func_num_arts():获得函数中实际参数的个数
func_get_arg(第几个参数):获得第几个参数的值,第几个参数是从0开始的
注意:
函数中实参比形参个数多将不会出错,但时默认情况下会忽略,我们可以使用func_get_xxx获得相关的信息
9、引用参数:通常用在要修改参数值本身的情况下
注意:
(1)&符号必须放在形参上面
(2)如果是引用参数,传参数必须传变量,不能传值,因为只有变量才有地址
<?php $str1='小猫'; function mystr(&$str){ echo $str.='真可爱'; } mystr($str1); var_dump($str1); ?>
10、自定义函数中的返回值:return
注意:
一般写函数我们不会多次使用echo,而是将这个值返回,使用return,函数在哪里调用的就返回到哪里
return返回值以后,它后面的代码就不执行了
11、局部变量
注意:
(1)函数内部声明的变量只能在函数内部使用,就是局部变量
(2)函数的形参其实就是一个局部变量,调用的时候将实参传递到内部
12、全局变量:在函数外部声明的变量叫全局变量,可以在函数中使用(条件:你需要加上global关键字)
global可以将外部的变量在函数内部使用,这才是名副其实的全局变量
<?php $name='xxooxxoo'; $sex=0; function test(){ $name='ooxx'; global $name,$sex; echo $name; echo $sex; } test(); ?>
13、超全局变量:$GLOBALS,引用全局作用域中的全局变量,该变量是自动创建的,它包含了所有全局变量,需要使用$GLOBALS[‘’变量名']的方式来使用
<?php $name='xxooxxoo'; $sex=0; function test(){ $name='ooxx'; echo $GLOBALS['name']; echo $GLOBALS['sex']; } test(); ?>
global和$GLOBALS的区别:
global是在函数中产生一个指向函数外部变量的引用变量,而不是真正的函数外部变量
$GLOBALS[]:调用的是外部变量,函数内外保持一致
14、静态变量:static 变量名 默认情况下,函数内的变量执行完就释放了,它是暂时不让释放
注意:
(1)在函数中声明的静态变量,只在第一次调用的时候声明,第二次调用一看是静态变量,就到静态区域查找,没有的话才再次声明
<?php function test(){ static $str=1; echo $str; $str+=1; } test(); test(); test(); test(); ?>
15、变量函数:将变量的值(字符串)作为函数的名字加上括号来运行
<?php function test(){ echo 'hello world'; } $var='test'; $var(); ?>
16、回调函数:将函数名以字符串的方式传递,然后使用变量函数的方式来运行
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php function demo1($guize){ for($i=0 ; $i<=5 ;$i++){ if($guize($i)){ continue; } } demo1('guize1'); //demo1('guize2'); //规则是用来判断数字是否为3 function guize1($num){ //如果这个$num为3的话返回真 if($num == 3){ return true; }else{ return false; } } //规则是用来判断数字和2区域是否为0 function guize2($num){ if($num % 2 == 0){ return true; }else{ return false; } } //demo1(); /*function demo2(){ for($i = 0 ; $i <= 5 ; $i++){ if($i % 2 ==0){ continue; } echo $i.'<br />'; } } demo2();*/ ?>