一、函数的声明
- 语法:
function 函数名([arg1][,arg2]...[,argN]){
.....函数体功能代码段...
return 返回值; //没有返回值则为NULL
}
-
参数:
- 按值传参
- 引用传参
栗子:
$a=10;
$b=11;
//按值传参
function f1($a=2,$b=3){
$a=$a+1;
$b=$b+1;
echo $a.','.$b.'</br>';
}
/*按值穿参,不会改变外部变量*/
f1($a,$b); //11,12
echo $a.','.$b.'</br>'; //10,11
f1($a,$b); //11,12
//用&方式,表示引用传参
function f2($a=3,&$b=4){
$a=$a+1;
$b=$b+1;
echo $a.','.$b.'</br>';
}
/*按值穿参,不会改变外部变量*/
f2($a,$b); //11,12
echo $a.','.$b.'</br>'; //10,12
f2($a,$b); //11,13
- 特点:
- 参数可以有默认值,默认值必须是常量表达式(标量类型),不能是诸如变量,类成员,或者函数调用等
- php函数支持可变数量的参数列表
二、函数的特性
- 函数名命名与变量、常量命名规范相同
- 函数名不区分大小写
- 函数名必须是唯一的
- 函数不会自己发挥作用,只有在调用的时候才会执行并发挥作用
- 函数可以有返回值,但只能有一个返回值,返回值可以是任何php支持的数据类型
- php支持可变函数,他的实质就是可变变量
三、函数的动态调用(可变变量的实质)
/*函数动态调用*/
function t(){
return 'test';
}
$str="t";
echo $str(); // $str() 等价于 t()
/*可变变量*/
$h="hello";
$hello="hello world";
echo $$h; // $$h 等价于 $($h) 等价于 $hello 等价于 "hello world"
四、函数内的局部变量
- 函数内的变量有两种,以下两种变量仅在函数内有效:
- 局部变量(local):函数内部声明的变量
- 局部静态变量(static):函数内部使用关键字static声明的变量。静态变量的值不能是表达式的值,只能是标量值
- 变量知识补充:
- 全局变量(global):在全局声明的变量,全局有效
- 变量的销毁和检测
- 栗子:
$a=10;
function f1($a=123){
echo $a; //123
$a++;
echo $a; //124
global $a; //指定函数内变量使用的是全局变量
$a++;
echo $a; //11
}
echo $a; //10
f1();
echo $a; //11
function f2(){
$a=100; //普通局部变量在每次函数被调用时都会被初始化
static $num=100; //静态局部变量,它的值只能是标量值,在函数首次被调用时被初始化
$a++;
$num++;
echo $a,$num;
}
/*静态局部变量所做的静态计数器*/
f2(); //101 101
f2(); //101 102
f2(); //101 103
五、函数和业务代码分离(包含文件)
- 函数抽离成单独文件:
<?php
/*func.php文件*/
function test(){
echo 'testests';
}
- 四种引入方式:
- include:
- 如果引入文件有错误,代码尽可能的往下执行
<?php /*1.php文件*/ include 'func.php'; //实质就是将func.php文件的代码复制在次行 include 'func.php'; //如果重复引用则会报“函数重名错误”,test函数有两个
- require:如果引入文件有错误,代码立即终止执行
- include_once:
- 只会引入一次,如果在此之前已经引用过则不会再次引入
<?php /*1.php文件*/ include_once 'func.php'; //include_once会检测当前是否已经包含这个文件 include_once 'func.php'; //已经包含fun.php 所以此文件不会再被引入
- require_once
- include: