php之函数

来源:互联网 发布:斯蒂芬库里 知乎 编辑:程序博客网 时间:2024/06/05 09:16

1.函数默认值

可以在函数定义形参的时候给定一个默认值:
PS:设置默认值的形参都往右边放。

function fun($a, $b = 8, $c = "tom"){  echo "<br>"," a = $a"," b = $b "," c = $c";}fun(3,9);//输出 a = 3 b = 9 c = tom

2.函数形参传值

echo "<hr>实参和形参通过值传递赋值:";$x = 3;$y = 6;function f6($a,$b){  $a++;  $b++;  echo "<br>f6函数内:"."a = $a , b = $b";//f6函数内:a = 4 , b = 7}f6($x,$y);//$x,$y都是实参,调用函数f6的时候将通过值传递给形参$a,$b赋值f6(3,6);//36是实参echo "<br>全局区:x = $x , y = $y ";//全局区:x = 3 , y = 6 echo "<hr>实参和形参通引用传递赋值:";$x = 3;$y = 6;function f7($a,&$b){  $a++;  $b++;  echo "<br>f7函数内:"."a = $a , b = $b";//f7函数内:a = 4 , b = 7}f7($x,$y);//$x,$y都是实参,调用函数f7的时候将通过值传递给形参$a,$b赋值//f7(3,6);这样错误 Fatal error: Only variables can be passed by referenceecho "<br>全局区:x = $x , y = $y ";//全局区:x = 3 , y = 7 

这里写图片描述

3.函数参数数量

  1. 我在在调用函数的时候,一般实参和形参保持一致性;
  2. 带有默认值的函数,在调用的时候,实参可以从右往左省略;
  3. 定义函数的时候不带形参,但在调用函数的时候可以使用任意多个实参,代码如下:
function myfun(){   echo "myfun被调用<br>";  $argnum = func_num_args();  echo "实参参数个数:$argnum<br>";  //获取指定下标的实参数据  $fourthArg = func_get_arg(3);//获取第四个参数值  echo "第四个参数值:$fourthArg  <br>";  //获取函数的实参数据数组  $argarr = func_get_args();  foreach($argarr as $val)    echo $val.",";}myfun(1,2,3,"abc",true,7,8);

这里写图片描述

4.可变函数

可变变量:一个变量的名字还是一个变量,

$abc ="hello";$hello= 99;echo $$abc;//输出99

可变函数:一个函数的名字是一个变量的值。

function myfun1(){    echo "myfun1被调用";}$ff = "myfun1";$ff();//这里就是调用myfun1();

5.匿名函数

//①匿名函数成形式一--------------------$f1 = function (){ echo "不带参数的匿名函数<br>";};//这里分号不能少,相当于赋值语句$f1();//调用不带参数的匿名函数$f2 = function ($x,$y){ echo "带参数的匿名函数x=$x , y = $y <br>";};$f2(3,6);//调用带参数的匿名函数//②匿名函数成形式二--------------------function f3($x,$y,$z){    $x = $x * $x;    $y = $y * $y;    $z($x,$y);//$z 形参接收了匿名函数,在f3函数内调用这个匿名函数}//将匿名函数作为实参来使用f3(3,4,function($a,$b){    $c = $a + $b;    echo "平方和:$c  <br>";});

这里写图片描述

7.判断函数是否存在

if(function_exists('f3'))  echo 'f3函数存在 <br>';if(!function_exists('f4')){  //如果函数f4不存在,则创建该函数  function f4()  {    echo "已创建函数f4 <br>";  }  f4();//调用f4函数}

8.函数内外变量作用域

  1. 在函数内部无法直接使用全局区的变量:
<?phpheader("content-type:text/html;charset=utf-8");//定义一个全局区变量$a$a = 123;function fun(){  //在函数内使用全局区的变量$a--报错  echo $a; //Notice: Undefined variable: a in C:\Apache24\htdocs\2zuoyongyu.php on line 11}fun();
  1. 在全局区无法访问函数的局部变量:
function f1(){  $v  = 11;}f1();//Notice: Undefined variable: v  echo "<br>在全局区访问函数的局部变量 v = $v ";
  1. 局部变量在函数执行完后就销毁了,但是静态局部变量不会
function ff(){  static $num = 0;//静态局部变量初始化,初始化只执行一次,之后它的值会被保留  $num++;  echo "<br>函数ff被调用 $num 次";}ff();ff();ff();

这里写图片描述
4. 那么在函数内如何访问全局区变量呢? 有2种方式:
①通过关键字global

//定义一个全局区变量$a$a = 123;function fun(){    global $a; //声明一个局部变量$a,跟全局区的$a同名且引用同一数据  echo "<br>函数内 a = $a";  $a = 222;//修改$aecho "<br>函数内修改后a = $a";}fun();echo "<br>全局区a = $a";

这里写图片描述

②使用预定义变量 $GLOBALS 访问

function fun(){    //使用预定义变量 $GLOBALS 访问 $a  echo "<br>函数内 a = ".$GLOBALS['a'];  $GLOBALS['a'] = 222;//修改$aecho "<br>函数内修改后a = ".$GLOBALS['a'];   //下面代码将销毁$a变量,全局区将无法访问  //unset($GLOBALS['a']);}fun();echo "<br>全局区a = $a";
0 0
原创粉丝点击