函数:定义形式:
function 函数名 (形参1,形参2,.... )
{
//函数体(代码块)
}
函数调用:①没有返回值的函数,调用语句是独立语句
函数名(实参1,实参2, .... ); 实参个数应该跟形参有匹配性。
②有返回值的函数,调用语句会“混杂”在别的语句中,并将该调用语句当作一个“数据”来使用:
A: $v1 = 函数名(); 赋值给其他变量;这里省略实参语法,下同。
B: $v1 = 函数名() * 3 + 6; 参与运算,然后再赋值;
C: echo 函数名(); 直接输出
D: echo 函数名() * 3 + 6; 参与运算,然后再输出
E: $v1 = 函数名2( 函数名() , 实参2,实参3, .... ); 当作实参使用
函数参数问题:形参与实参
形参:变量;只在该函数中有效;在函数中执行时有效,函数结束,变量“销毁”。
实参:“实际数据”;作用是将自身数据“赋值给”形参变量
形参与实参应有“一一对应”关系。
定义形式: function 函数名(形参1,形参2,...... ){ 。。。。}
调用形式: 函数名(实参1,实参2,..... ) (一一对应)
默认值参数:function click(num=1){ (num=1就是默认值参数)
代码
}
默认值只能是常量表达式,或常量,不能是变量。
函数传值问题:
①默认都是值传递
②如果实参本身就是“直接数据”,则不存在传值问题,而是简单的“赋值”。
③让某个参数(形参)以引用传递的方式来传值:引用传递的形参(实参),在函数内部改变其值,在函数外面的实参,也会相应修改。
参数数量问题:
①通常,实际参数的数量应该跟形式参是的数量一致。
②如果形式参是中有默认值,则实际参数的对应项可以省略。即:实参的个数,至少应该不少于形参中的非默认值参数的个数。
三种系统函数:
func_get_args(); //获得一个函数所接收到的所有实参数据,并结果是一个数组
func_get_arg(n); //获得一个函数所接收到的第n个实参数据(n从0开始)
func_num_args(); //获得一个函数所接收到的所有实参数据的个数
函数返回值:通常是值传递。也可以引用传递,具体形式:
function &函数名(形参1,形参2,.....) 注意函数名前有个引用符号“&”
{
$result = 0; //初始化。。。。。。
return $result; 此时返回数据,只能是变量
}
调用函数:
$v1 = &函数名(实参1,实参2,....); 引用返回的函数,自然是指有返回值。
可变函数:
function f1(){
echo "<br>函数f1被调用;";
}
$str1="f1";
$str1(); 调用可变函数(函数名此时是一个变量,内容是一个函数名)
匿名函数:未命名的函数
①$f1=function(){...函数体} 定义形式上没有名字,其实将赋值给了变量$f1
②调用其他函数2(匿名函数,实参1,实参2, ......)
【1】此形式的匿名函数只有定义的函数体(无函数名)
【2】此形式的匿名函数只能作为其他函数调用时的参数(其他函数通常有特定用处)
【3】此匿名函数会在调用其他函数的“过程中”被执行。
call_user_func_array(匿名函数,数组);
将数组的每一项当作该匿名函数的若干个实参,传递到该匿名函数中,并执行该匿名函数,并可以从该匿名函数中返回数据。
echo"<hr>";
cal_user_func_array(
function($m1,$m2,$m3){
echo"<br>m1=$m1";
echo"<br>m2=$m2";
echo"<br>m3=$m3";
}
,array(1,2,3)
);
echo<hr>;
$a1=aray(1,2,3,4,5,1);
$s=call_user_func_aray(
function(){ 可见这个匿名函数作用是求一个数组的“总和”
$a=func_get_args(); 取得传递过来的所有实参
$sum=0;
foreach($a as $v){
$sum += $v:
}
return $sum;
}
,$a1
);
echo "<br>和为:$s";
变量作用域:
局部作用域:只能在所定义的函数范围内使用。
全局作用域:在函数的“外部”范围使用。
php中,局部和全局作用域是不重叠的。
超全局:就是在函数的内部和外部都可以使用。
超全局变量系统定义,我们不能创建超全局变量。
静态局部作用域:其实也是局部,但多一个特征:数据能够在函数退出后仍然保持不丢失。
局部访问全局变量:global $变量名
$v1=10; 全局
functon f3(){ 局部
golbal $v1; 访问全局变量$v1
echo"<br>v1=$v1";
$v2=20;
}
f3();
全局访问局部变量:
$v1 = 10;
function f1( &$p1, $p2){ ...... } //$p1是函数的形参,也即就是函数的内部(局部)变量
$v2 = f1( $v1, 10); //此时我们认为$v1就可以使用函数中$p1的值。
几种有关函数的系统函数:
①function_exists(): 判断某个函数是否被定义过,返回布尔值
if( function_exists(“ func1 “) == false ){
function func1(){。。。。。。}; 定义函数
}
②func_get_arg(n):获得一个函数的第n个实参值(n从0开始)
③func_get_args():获得一个函数的所有实参,结果是一个数组
④func_num_args():获得一个函数的所有实参的个数。