任何有效的php代码都可以作为函数体使用
//例子1
function add($a,$b){
echo $a+$b;
}
add(10,20); //php页面显示30
// 例子2
function add($a,$b){
return $a+$b; //return功能: 返回值给调用的地方,结束这个函数的运行
}
add(10,20); //php页面什么都不显示,因为不是echo输出
查看一个变量的类型和值的方法:var_dump(add(10,20)); //这次查看 这个函数值的数据类型和值是多少
自定义函数
function 函数名(形式参数1,形参2...形参n){ ... }
<?php
$i=10; //全局变量
function test(){
global $i; //php中要用全局变量先要声明一下
echo $i;
$a=1;
}
test();
?>
//函数内部有echo也没法在显示输出内容,必须要调用这个函数才能输出函数内部内容
定义常量: define('MY_NAME', 'ROBIN.FANG'); //后面必须加分号
echo MY_NAME; //输出ROBIN.FANG
echo 'MY_NAME'; //输出MY_NAME
静态变量:静态变量是指在函数内部定义变量的时候使用static关键字来定义变量
特点:函数执行完毕后变量不会立即消失,当再次调用函数时静态变量保持的值依然存在,并且仅在第一次执行函数时会初始化值
function test(){
static $a=10;//仅在第一次调用时执行
echo ++$a;
}
test(); //11
echo'<br/>';
test(); //12
长久保存一般保存在硬盘或者数据库中
参数传递
- 按值传递参数
function test($a){
echo ++$a; //因为a++中的++是在输出后执行与printout一样原理,所以要用++a
}
$i=10;
test($i); //11
echo'<br/>'.$i; //10
按值传递参数,我们在参数传递的时候默认的就是使用这个方式,对形式参数的操作根本不影响实际参数的值,两者没有联系
- 按引用传递参数
function test(&$a){
echo ++$a;
}
$i=10;
test($i); //11
echo'<br/>'.$i; //11
按引用传递参数,相当于形式参数和实际参数指的是同一个人,只是名字不一样,对形式参数的操作会直接影响到实际参数(变量)
- 函数的默认参数
//例子1
function test($a=10){ //参数的默认值
echo ++$a;
}
test(); //11
//例子2
function test($a=10){
echo ++$a;
}
test(20); //21
可以给形式参数设置默认值,设置方法直接赋值即可,给形式参数加默认值的时候是从右往左加的,右边的必须有,才能给左边的加。
function test($a=20,$b=10){
echo $a+$b;
}
test(); //可以两个都用默认值都不传
function test($a=20,$b=10){
echo $a+$b;
}
test(25); //35
//这里的25肯定是传给a的
- 可变长度参数列表
php提供的可以直接使用
func_get_args();
func_get_arg();
func_num_args();
这三个函数可以使用在我们定义函数内部,能够返回给我们关于此参数的信息
<?php
function test(){
var_dump(func_get_args()); //显示所有参数信息
var_dunp(func_get_arg(4)); //查看第4个参数
var_dump(func_num_args()); //返回参数个数
}
test(21,323232,4343,'单位取得','dmmcc');
?>
//var_dump()的功能和echo差不多都是输出的功能
“<br/>”在php网页中可以显示换行,但<br/>在zend studio中没法显示,必须在html文件中才能显示,php文件中用转义字符'\n'
定义的函数如果里面有echo输出值是不会在控制台显示的,需要调用这个函数才会显示
可变函数
function test(){
echo '我是test函数';
}
$a='test'; //把函数名加上引号赋值给变量
$a(); //test()
可变函数不能用于例如 echo(),print(),unset()...
递归函数
在函数内部自己调用自己的函数
<?php
function test($n){
echo $n.' ';
if($n>0){
test($n-1);
}
else{
echo'<-->';
}
echo $n.' ';
}
test(3); // 3 2 1 0 <-->0 1 2 3
?>
递归函数:
- 函数在被调用的执行过程中会在内存里分配空间用于存储临时数据,那么函数在执行过程中默认之间时没有联系的(除了静态变量、按引用传、全局变量),里面的变量默认都是全局变量,相互之间没有影响
- 递归函数,在函数的内部需要适时结束函数运行的条件
内置函数
php的主要数据类型有 整形、浮点型、布尔型、字符串型