php 函数

函数:定义形式:

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():获得一个函数的所有实参的个数。

posted @ 2018-01-26 16:56  王策。  阅读(108)  评论(1编辑  收藏  举报