php函数(一)

(一)基本使用

函数定义形式

function 函数名(形参1,形参2,……){

  函数体

}

函数调用形式

    1.没有返回值的函数,调用语句是独立语句

      函数名(实参1,实参2,…);

    2.有返回值的函数,将调用语句当作一个“数据”使用

      $v1=函数名(实参1,实参2,…);

$v1=函数名(实参1,实参2,…)*3+6;//参与运算

echo 函数名(实参1,实参2,…);//直接输出

echo 函数名(实参1,实参2,…)*3+6;

$v1=函数名(函数名(),实参1,实参2,…);//可当实参使用

函数调用流程分析

开始调用:实参传数据给形参

程序执行流程进入到函数中(一个独立的运行空间),跟全局执行空间是隔离的

按常规逻辑执行函数中的代码

如果碰到return语句,则终止函数的执行,调回函数开始调用的位置

如果执行到函数最后位置,也同样跳会函数开始调用的位置

(二)函数参数

函数定义时:形参

   只在该函数中有效的变量名,函数结束,通常这些变量会销毁

调用时:实参

  可以是一个实际数据(5,abc),也可以是一个变量,其作用是将数据赋值给形参

实参与形参一一对应

参数的默认值

定义一个函数时,在形参的位置,可以给形式参数设定默认值

默认值不能是对象或资源类型,只能是常量表达式,或常量,不能是变量。

调用函数时,如果给有默认值的形参传值,则使用传来的数据,不给传数据,则使用默认值

示例:functiongetArea($v,$pi=3.14){ 函数体}

函数的参数传值问题

值传递,引用传递(在形参前加&,实参形式不变

引用传递时,实参只能是一个变量,引用传值的形参变量,在函数内部改变该形参变量的值,则对应实参变量的值也就改变

函数的数量问题

实参与形参一一对应,如果形参有默认值,实参可以省略

特殊情况:自由参数数量

   定义时不给定形参,但调用时,又可以给定任何个数的实参

类似于var_dump()可以传递不定个数的参数:

   var_dump($v1);

   var_dump($v1,$v2);

这种应用的实现,依赖于系统中的3个系统函数:

func_get_args();//获得一个函数所接收到的所有实参数据,结果是一个数组

func_get_arg(n);//获得一个函数所接收到的第n个实参数据(n从0开始)

func_num_args();//获得一个函数所接收到的所有实参数据的个数

示例:

  function getSum()

{

$arr=func_get_args();

$sum=0;

foreach($arr as$value){

$sum+=$value;

}

return $sum;

}

$he1=getSum(1,2);

$he2=getSum(1,2,3);

(三)函数的返回值

使用return语句,其后带一个数据(直接数据、变量数据、表达式结果数据),再返回到该数据的“调用位置”。

通常情况下,函数返回的数据都是以“值传递”的形式,还可以使用引用返回(&)的形式来定义一个函数的返回值形式。形式如下:

function &函数名(形参1,形参2,……)//注意函数名前有个引用符号“&”

{

 static  $result=0; //初始化(定义为静态变量后,不会随着函数结束而销毁,会持有该值,而且第二次及以后再调用该函数,也不会初始化了)

   ……

   return $result;//返回数据,只能是变量

}

调用函数:$v1=&函数名(实参1,实参2,……)//引用返回的函数,有返回值(即v1与result指向同一个数据)

(四)函数的其他形式

可变函数

可变函数,即函数名“可变”,与可变变量原理相同

$str1=”f1”; //只是一个字符串,内容为“f1”

$v1=$str1(3,4);//形式上看起来是一个变量后面加一个括号,本质是该变量的内容(f1)后面加括号,即这里是调用函数 f1(3,4);

实际应用中,需要根据“用户给定”的数据,来决定调用哪一个函数,比如:

function jpg(){处理jpg图}

function png(){处理png图}

function gif(){处理gif图}

$fileName=get filename(){获取用户上传的图片名}

$houzhui=get_houzhui($fileName);

$houzhui();

匿名函数

匿名函数就是没有名字的函数,有两种形式:

表现1:

 $f1=function(){…函数体;}//这里的匿名函数定义形式上没有名字,但其实将其赋值给变量$f1

使用时,与“可变函数”一样:$v1=$f1( );

表现形式2:

调用其他函数(匿名函数,实参1,实参2,。。。)

说明:

  此形式的匿名函数只有定义的函数体(无函数名),只能作为其他函数调用时的参数,会在调用其他函数的“过程中”被执行。

能够使用(匿名)函数当作实参的函数,并不多!

其中一个常见的是:call_user_func_array();

其形式为:

call_user_func_array(匿名函数,数组);

含义:将数组的每一项当作匿名函数的实参,传递到该匿名函数中,并执行该匿名函数,可以从匿名函数中返回数据。

示例1:

    call_user_func_array(function($m1,$m2){

echo “m1=$m1,m2=$m2”;

},array(1,2));

示例2:

$a1=array(1,2,3);

$func1=function(){

$a=func_get_args();

$sum=0;

foreach($a as $value){

$sum+=$value

}

return $sum;

}

$s= call_user_func_array($func1,$a1);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章