PHP学习记录(函数)
函数
函数含义
- 函数:是实现特定功能的、可以重复执行的代码段;
- 函数名:从语法上讲,函数名中能有汉字,但在实际开发中不建议使用!
函数结构
function 函数名 () { //代码块 }
函数名定义规则
- 开头:
[a-zA-Z_\x7f-\xff]
- 函数名:
[a-zA-Z0-9_\x7f-\xff]
- 函数的首字母不能为数字、可以是汉子或者字母,函数中间可以使用数字
函数的返回值
- 和其他语言不同的是,
PHP
并没有在函数声明的时候显示函数是否有返回值,如果函数内部使用了return
即表示有返回值,反之则表示没有返回值,返回类型可以为对象、数组、字符串等。
函数变量
//局部变量 //局部动态变量:变量只在函数内部执行,执行完毕则被销毁; //局部静态变量:使用static修饰,执行完毕不被销毁; //注:函数内部定义的变量,为局部变量,函数外部不能访问。 function func() { $a = 3; //局部动态变量 static $b = 34; //局部静态变量 } //全局变量 //在函数外部定义的变量,称为全局变量。在函数内部使用全局变量的时候,不能和其他语言一样直接使用,有两种使用方法: //(1)用global关键字进行声明后使用 $a = 3; function func() { global $a; echo $a; } //(2)使用超全局变量数组$GLOBALS直接访问 $a = 3; function func() { echo $GLOBALS['a']; }
函数的参数
值传递和引用传递
//值传递:当一个变量的值赋予给另外一个变量的时候,改变其中一个变量的值,将不会影响到另外一个变量的值 //引用传递:新变量指向了原始变量,改动新的变量将影响到原始变量,反之亦然。(只有有名字的变量才能引用传递,比如表达式就不可以) //注:在函数中传递参数的类型为对象时,即使不加&,也是引用传递,因为对象名对应的是该对象的引用地址。 $a = 4; function func1($c) //值传递 { $c = 7; } func1($a); echo $a, "\n"; //4,函数没有改变$a的值 function func2(&$d) //引用传递 { $d = 7; } func2($a); echo $a, "\n"; //7,函数改变了$a的值
参数默认值
//如果$a和$b没有默认值,调用该函数的时候必须传值,否则会报错,如果有默认值,可以不传参数 function func($a = 3, $b = 5) { echo "a的值为{$a}, b的值为{$b}\n"; } func();
可变参数列表
/* *在函数定义时,形参可以省略不写,在函数内部可以通过系统方法获取传递进行的参数数组。 *func_num_args():传入函数实参的个数 *func_get_args():传入函数实参列表(数组形式) *func_get_arg(index):传人函数具体位置的实参 */ function fun6() { echo func_num_args(), "\n"; //3 print_r(func_get_args()); //数组 echo func_get_arg(0); //10 } fun6(10, 11, 12);
传参类型限定
//函数定义时,可以给参数限定类型,共三种类型:array,object,callback function func(array $a) //实参必须为数组类型 { print_r($a); } //func(1); //会报错 func([1, 2, 3]);
复杂函数
可变函数
//将函数的名字赋值给变量,通过变量去调用函数,让函数的调用更具多样性 /* * is_callable(函数):判断函数能否被调用 * function_exists(函数):判断函数是否存在 */ function func() { echo 'hello, world', "\n"; } $fun = 'func'; if (is_callable($fun)){ //判断是否能调用 echo '能调用', "\n"; $fun(); } if (function_exists($fun)){ echo '能调用', "\n"; $fun(); }
函数的嵌套
/* * php所有定义的函数,作用域都是全局的 * * 和其他语言比如java相比,php不存在内置函数,意思就是说bar()不是foo()的内置函数, * 两者没有区别,作用域都是全局的,在bar()函数内不能调用foo()中声明的变量,但是bar() * 函数必须在foo()调用之后才会被定义,才能被调用 * */ function foo() { $a = 'hello, world'; function bar() { /* 不能调用变量$a */ echo 'bar()函数被调用'; } /* 内部可以调用bar(),因为其已经被定义 */ //bar(); } /* 现在不能调用bar(),因为其还没有被定义 */ foo(); /* 现在可以调用bar(),因为foo()调用之后,bar()已经被定义 */ bar();
递归调用:函数调用自己本身,递归里面需要有跳出递归的判断条件
匿名函数
/* * 匿名函数 * 函数没有指定名称,称为匿名函数 * 通过将函数赋给变量,通过变量来实现调用函数 */ $say = function($str) { echo 'hello, world'; }; $say('aaa');
相关推荐
xuebingnan 2020-11-05
Crazyshark 2020-09-15
zyyjay 2020-11-09
samtrue 2020-11-22
stefan0 2020-11-22
yifangs 2020-10-13
songshijiazuaa 2020-09-24
hebiwtc 2020-09-18
天步 2020-09-17
83911535 2020-11-13
whatsyourname 2020-11-13
zhouyuqi 2020-11-10
Noneyes 2020-11-10
mathchao 2020-10-28
王志龙 2020-10-28
wwwsurfphpseocom 2020-10-28
diskingchuan 2020-10-23