zoukankan      html  css  js  c++  java
  • 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():获得一个函数的所有实参的个数。

  • 相关阅读:
    【反射】Java反射机制
    Composer教程之常用命令
    Composer教程之基础用法
    Composer教程之初识Composer
    Composer 的结构详解
    现代 PHP 新特性系列(七) —— 内置的 HTTP 服务器
    现代 PHP 新特性系列(一) —— 命名空间
    现代 PHP 新特性系列(二) —— 善用接口
    现代 PHP 新特性系列(三) —— Trait 概览
    现代 PHP 新特性系列(四) —— 生成器的创建和使用
  • 原文地址:https://www.cnblogs.com/plmokn/p/8360411.html
Copyright © 2011-2022 走看看