函数

函数的定义

什么是函数?
函数是一种功能,通过调用,可以实现特定的一些功能,系统会提供给我们很多写好的函数,也可以
自己写。

系统函数:
如:is_int() is_float() is_bool() isset() empty() unset()

函数要点:
(1) 函数的作用
(2) 函数的参数
(3) 函数的返回值

 自定义函数

除了系统提供的函数,我们还可以自定义函数

1 function 函数名([参数1,参数2,参数3]){
2   函数体 (php语句)
3   [return 返回值]
 1 //函数定义
 2 function aaa(){
 3   echo "你好,北北!";
 4 }//函数的调用,函数可以在本文件任何位置,不受位置影响
 5 //因为内存加载不按照代码书写加载,是根据调用行数
 6 aaa();
 7 function func(){
 8   echo '123';
 9 }var_dump(function_exists('func'));
10 var_dump(function_exists('func1'));

函数的命名规范:
1. 函数名遵循php全名命名规则,字⺟数字下划线组成,不能以数字开头
2. 函数名不区分大小写,但我们一般使用小写。
3. 不能重复声明函数名⼀样的函数。
4. 检测函数名是否被声明 functio_exists,小括号里一定要加上引号

 函数的 return 返回值

return 的作用:
(1)如果函数中存在return并且执行该return,那么该函数的将执行结构可以被变量接收。
(2)如果函数的执行过程中执行了return语句,后续的代码将不在执行。

函数的形参和实参

形参:也称形式上的参数,声明函数的时候小括号里面的参数叫形参。

(1)形参可以有默认值 ,也可以没有默认值。
(2)没有默认值的时候必须有实参的传递。
(3)如果有默认值请将有默认值的参数放在最右边,没有默认值的形参放在最左边。
(4)默认值相当于小三 ,实参就是原配
(5)多个形参之间的我们用逗号进行分隔。

实参:称实际的参数,是在函数调用的时候小括号里面的写的内容。
(1)实参的个数可以比形参的多 ,多出来的参数没有用,所以我们实参的个数需要按照形参的个数
去书写。
(2)如果你的形参有默认值可以少写实参。

 1 <?php
 2   //调⽤创建游戏⻆⾊的功能
 3   CreatePerson('渣渣辉','男','战','屠');
 4   //定义⼀个创建游戏⻆⾊的功能
 5   function CreatePerson($name,$sex,$job,$wuqi='⽩菜',$head='锅盖',
 6   $yifu="麻袋",$xie='草鞋',$jiezhi="铁戒指"){
 7 //传奇为例
 8  //有姓名:
 9  echo '⻆的名称是:'.$name.'<br/>';
10  //有性别:
11  echo '⻆的性别是:'.$sex.'<br/>';
12  //有职业:
13  echo '⻆职业是:'.$job.'<br/>';
14  //以上是⽤户选项必须填写的内容
15  echo '进游戏<br/>';
16 //进⼊游戏之后有初始装备
17  echo '头部:'.$head.'<br/>';
18  echo '拿:'.$wuqi.'<br/>';
19  echo '身披:'.$yifu.'<br/>';
20  echo '脚穿:'.$xie.'<br/>';
21  echo '戒指:'.$jiezhi.'<br/>'; 

可变参数函数

以上参数的函数其实就是实参和形参个数相同不管怎么凑都是相同的。

所谓可变参数函数,就是不需要写形参,实参任意个数。
a. func_get_args() 获取所有实参的值,以数组的形式返回。
b. func_num_args() 获取所有是实参的个数。
c. func_get_arg(index) 通过下标去取出我们数组中的值。

 1 <?php
 2   function sum(){
 3   //获取所有实参的值以数组的形式返回
 4   $arr = func_get_args();
 5   //var_dump($arr);
 6   //获取所有实参的个数
 7   $num = func_num_args();
 8   //echo '<hr/>';
 9   //通过下标获取我们数组中的值
10   //echo func_get_arg(10);
11 $sum=0;
12  for($i=0;$i<$num;$i++){
13  $sum = $sum+func_get_arg($i);
14  }echo $sum;
15  }sum(1,2,3,4,5,6,7,8,9,'北京哥');

变量函数

变量函数(动态调用函数): 如果一个变量后面有括号: $zhangsan=’demo’;$zhangsan() 就会寻找与
变量值同名的函数进行调用

 1 $a = 'laowang';
 2 $laowang = 'erhuo';
 3 echo $$a;
 4 function goods(){
 5   echo 'hi';
 6 goods();
 7 $heart = 'goods';
 8 $heart();
 9 //php很灵活,你本意就是调⽤goods函数,但如果你有⼀个变量⾥⾯正好是goods
10 //它同样可以通过调⽤变量的⽅法调⽤函数。
11 function text(){
12  echo '本故事纯属虚构如有雷同那就是事实<br/>';
13 }$zhangsan = 'lisi';
14 $lisi = 'text';
15   
16 $$zhangsan();

 匿名函数

所谓匿名函数:就是没有名字的函数
声明格式:
$user = function(){};
注意:一定要加分号
匿名函数要在声明后面调用函数 不能在声明函数前调用函数,因为匿名函数其实就是变量赋值,
是把整个函数赋值给一个变量了,变量是先声明后使用

1 $user=function($a){
2  echo '我就是匿名函数 我匿名举报,彩军上班竟然去会所休闲'
3  echo $a;
4  };
5  $user(2);

递归函数

1 function t(){
2  echo '!';
3  t();
4 }
5 t();

递归的特点:
1.自身调用自身 (如果一直调用下去肯定不行,死循环)
2.要有一个明确的边界,能够终值调用
写一个num求和函数
输入参数n,可以求到1+2+3+4+...+n的和

 1 // 1+到100的和是多少?1+2+3+...+100
 2 // 1+到99的和是多少?
 3 // 1+到89的和是:[1+到88之和]
 4 // 89+87+[1+到86之和]
 5 // ...
 6 // 89+87+...+2+1
 7 function sum($n) {
 8   if($n>1) {
 9   return $n+sum($n-1);
10   } else {
11   return 1;
12   }}echo sum(100);

函数中变量作用域

局部和全局变量

变量的作用域,就是变量在函数⾥,和不在函数⾥。
对于php,函数的作用域非常简单,它就区分函数内和函数外。

1 function t1() {
2   echo $a;
3   $b = 5;
4 }$a = 2;
5 t1();//Notice
6 echo $b//No

函数内部的变量和函数外部的变量互不干扰。
函数内变量成为"局部变量";
在php页面中声明的,且在函数外部变量成为"全局变量";

 global关键字(不推荐)

如果要在全局使用局部变量怎么办?
法1:使用关键词 global (强烈不推荐)

法2:使$GLOBALS 超全局数组(同样不推荐)

static 静态变量

1.普通局部变量
函数调用时--->初始化
函数结束时--->从内存消失

1 function t() {
2   $a = 3;
3   $a += 1;
4   return $a;
5 }echo t(),'<br >';
6 echo t(),'<br >';
7 echo t(),'<br >';

函数放在这里,不调用,不执行
当我们调用的时候,会在内存中申请一个空间来执行。
函数运行完毕,空间会从内存中清除掉。
再调用 ---> 再申请。
在内存清除数据之前,return可以帮你返回到调⽤用处一个值,可供外界使用。

2. static 静态变量
所谓静态变量,是相对内存,俗称静止不动的变量。

函数初次调⽤时 ---> 初始化
函数结束时 ---> 不从内存消失,下次接着用

1 function t1(){
2   static $a = 3;
3   $a += 1;
4   return $a;
5 }echo t1(),'<br >';
6 echo t1(),'<br >';
7 echo t1(),'<br >';

常量貌似也可以做到静态的工作,一旦声明,常驻内存,不关闭页面不消失,但常量不可改变,一旦
声明,无法修改,静态变量,可以随时修改。

posted @ 2018-12-20 20:26  街特闷  阅读(200)  评论(0)    收藏  举报