首页> 基础笔记 >PHP基础学习 >基础语法 基础语法

PHP声明及应用各种形式的PHP函数

作者:小萝卜 2019-08-13 浏览 884

简介常规参数的函数、伪类型参数的函数、引用参数的函数、默认参数的函数、可变个数参数的函数、回调函数

5.1  常规参数的函数

常规参数的函数格式说明:

  string example(string name,int age,double height) 

所谓的常规参数的函数,就是实参和形参应该个数相等、类型一致。就像C或Java等强类型型语言。

上面函数有三个参数,调用时传递的参数个数和顺序必须一致。

string chr(int $ascii)   //返回指定的字符

float ceil(float $value) //进一法取整

array array_combine(array $keys,array $values)//合并一个数组

string implode(string $glue,array $pieces)

   //使用常规参数传值
    function test($arg) {         
        $arg = 200;  //在函数中改变参数$a的值为200
    }
    $var = 100;      //在父程序中声明一个全局变量$var,初值为100
    test($var);        //调用test函数,并将变量$var的值100传给函数的参数$arg
    echo $var;       //输出100。$var的值没有变化

5.2  伪类型参数的函数

伪类型参数的函数格式说明:

  mixed funName(mixed $a, number $b, callback $c) 

PHP是弱类型语言,不仅在声明变量时不需要指定类型,当然在声明函数时也不需要指定类型,所以在PHP中函数的每个参数,都可以为其传递任意类型的值。

三种伪类型: mixed、number 和 callback。

bool empty(mixed $var)    //检查一个变量是否为空

bool usort(array &$array,callback $cmp_function)

//使用用户自定义的比较函数对数组中的值进行排序

number abs(mixed $number)  //绝对值

//函数中的参数:伪类型参数
//mixed混合类型 number数值类型 callback回调函数类型 

//格式化输出数据:
//格式:void out(mixed $a)
function out($a){
    echo "< pre>";
    var_dump($a);
    echo "< /pre>";
}

out(10);
out("abc");
out([10,20,'aa']);

5.3  引用参数的函数

引用参数的函数格式说明:

  void funName(array &args) 

相对于按值传递模式,并不会将父程序中的指定数值或目标变量传递给函数,而是把该数值或变量的内存储存区块相对地址导入函数之中。因此当该数值在函数中有任何变动时,会连带对父程序造成影响。

注意:如果在函数的形参中使用“&“修饰的参数,在调用该函数时必须传入一个变量给这个参数,而是不能传递一个值。

function demo(&$a,$b){
    $a=200; //由于a是引用类型,故参数x也会改变200
    $b=300;
}

$x=20;
$y=30;
demo($x,$y);

echo $x.":".$y; //200:30

5.4 默认参数的函数

默认参数(“[ ]”中的)的函数格式说明: 

mixed funName(string name [,string value [,int  num]]) 

在php中,支持函数的默认方式调用。如果在调用函数时没有指定参数的值,在函数中会使用参数的默认值。 

注意:默认参数必须列在所有没有默认值参数的后面。

//定义函数
//格式:number add(number $a[,number $b[,number $c]]);
function add($a,$b=0,$c=0){
    return $a+$b+$c;
}

//使用
echo add(10)."< br/>";
echo add(10,20)."<  br/>";
echo add(10,20,30)."< br/>";

5.5  可变个数参数的函数

可变个数参数的函数格式说明:

  mixed funName(string arg1 [,string ...] ) 

通常用户定义函数时,设置的参数数量是有限的。如果希望函数可以接受任意数量的参数,需使用以下函数:

func_get_args()  //返回一个数组,包含所有参数

func_num_args()  //返回参数总数 

func_get_arg()    //接收一个数字参数,返回指定参数

//5.可变个数的参数函数:
//func_get_args();//以数组的方式返回所有的参数信息
//func_get_arg($index) //获取指定参数位置(index:从0开始的整数)的信息
//func_num_args()//获取参数的个数。

//定义函数
//格式:number add(number $a[,number $a[,...]]);
function add(){
    $m=func_num_arg(); //获取参数的个数
    //遍历所有参数
    $sum=0;
    for($i=0;$i<$m;$i++){
        $sum += func_get_arg($i); //累加每次获取的参数值
    }
    return $sum; //返回结果
}

//使用
echo add(10)."< br/>";
echo add(10,20)."< br/>";
echo add(10,20,30,10,20,30,10,20,30)."< br/>";

//可变函数,就是调用函数时使用的是变量名。

function one(){
    echo "one.....< br/>";
}

function two(){
    echo "two.....< br/>";
}

//测试:变量name的值决定调用的是哪个函数。
$name="one";
$name(); //调用函数
$name="two";
$name();

5.6  回调函数

回调函数格式说明:

  mixed funName(callback arg) 

所谓回调函数,就是指调用函数时并不是传递一个标准的变量作为参数,而是将另一函数作为参数传递到调用的函数中。

1.变量函数

2.使用变量函数声明和应用的回调函数

3.借助call_user_func_array()函数自定义回调函数

4.类静态函数和对象的方法回调

//回调函数的实例:

//定义一个使用函数的函数,就是要求参数是一个函数
function demo($a){
    echo "aaaaa< br/>";
    $a();
    echo "aaaaa< br/>";
}

//测试:(使用demo函数是必须传入函数名,故称回调函数参数)
//demo("one"); //传入one,则one函数被调用
demo("two"); //传入two,则two函数被调用
//demo("aa");

function one(){
    echo "one.....< br/>";
}

function two(){
    echo "two.....< br/>";
}
5.6.1  变量函数
 /** 声明第一个函数one, 计算两个数的和
        @param  int $a  计算和的第一个运算元
        @param  int $b  计算和的第二个运算元
        @return int     返回计算后的结果
    */
    function one( $a, $b ) {
        return $a + $b;
    }
    /** 声明第二个函数two, 计算两个数的平方和
    */
    function two($a, $b) {
        return $a*$b + $b*$b;
    }   
    $result = "one";   //将函数名"one"赋给变量$result, 执行$result()时则调用函数one()
    //$result = "two"; //将函数名"two"赋给变量$result, 执行$result()时则调用函数two()
     echo “运算结果是:”.$result(2, 3);    //变量$result的函数名值,就调用哪个函数

5.6.2 使用变量函数声明和应用的回调函数

    // 声明回调函数filter, 在0-100的整数中通过自定义条件过滤不要的数字
    function filter( $fun ) {
        for($i=0; $i <= 100; $i++) {
            //将参数变量$fun加上一个圆插号$fun(), 则为调用和变量$fun值同名的函数
            if( $fun($i) ) 
                 continue;   
            echo $i.'< br>'; 
        }
    }
   //声明一个函数one, 如果参数是3的倍数就返回true, 否则返回false
   function one($num) {
        return $num%3 == 0;
    }
    // 声明一个函数two, 如果参数是一个回文数(翻转后还等于自己的数)返回true, 否则返回false
    function two($num) {
        return $num == strrev($num);
    }
    filter("one");      //打印出100以内非3的倍数,参数"one"是函数one()的名称字符串,是一个回调
    echo '--------------------< br>';
    filter('two');      //打印出100以内非回文数,参数"two"是函数two()的名称字符串,是一个回调

5.6.3 借助call_user_func_array()函数自定义回调函数

    /** 声明一个函数fun(), 功能只输出两个字符串,目的是作为call_user_func_array()回调参数
        @param  string  $msg1   需要传递一个字符串作为参数
        @param  string  $msg2   需要传递另一个字符串作为参数
    */
    function fun($msg1, $msg2) {
        echo '$msg1 = '.$msg1;
        echo '< br>';
        echo '$msg2 = '.$msg2;
    }
    
    /** 通过系统函数call_user_func_array() 调用函数fun()
        第一个参数为函数fun()的名称字符串
        第二个参数则是一个数组,每个元素值会按顺序传递给调用的fun()函数参数列表中
    */
    call_user_func_array('fun', array('博客', '萝卜网络博客'));
    
 

5.6.4  类静态函数和对象的方法回调

/* 声明一个类Demo,类中声明一个静态的成员方法fun() */
    class Demo {
        static function fun($msg1, $msg2) {
            echo '$msg1 = '.$msg1;
            echo '
';
            echo '$msg2 = '.$msg2;
        }
    }
    /* 声明一个类Test, 类中声明一个普通的成员方法fun()  */
    class Test {
        function fun($msg1, $msg2) {
            echo '$msg1 = '.$msg1;
            echo '
';
            echo '$msg2 = '.$msg2;
        }
    }
    
call_user_func_array( array("Demo", 'fun'), array('博客', '萝卜网络博客') );
call_user_func_array( array(new Test(), 'fun'), array('BroPHP', '学习型PHP框架') );

很赞哦! (0)

文章评论

    高端网站建设