PHP学习(7) 函数

本文介绍函数的调用,定义,参数,以及返回值。

1. 函数调用

在PHP中,直接用函数名加参数即可调用函数,基本上有一点基础的人都能明白。如:

PHP
<?php
$value = test(1);
function test($value) {
    return $value++;
}

2. 函数定义

PHP学习(1) 词法结构 中说过”标识符是指给变量名、函数名和类名命名的一个名字。它的首字母为下划线和大小写字母(ASCII码的0x7F~0xFF也可以,不过一般没人用。),首字母以外可以由下划线、大小写字母以及数字0~9组成。“函数名由标识符组成。因为PHP不支持函数重载,所以函数名不能有重名
另外,函数可以嵌套申明,不过用处不是很大。嵌套申明的函数在没有调用外层函数时,是不能调用里层函数的。如下面的代码,如果单独调用inner函数会出现异常。

PHP
<?php
echo outter();
echo inner();
function outter() {
    function inner() {
        return 2;
    }
    return 1;
}

3. 变量作用域

PHP中有三种变量作用域:全局作用域和局部作用域以及静态变量。
在函数的参数以及在函数内在申明的静态或者动态变量都是局部作用域。
只有用global申明的才是全局变量,当然全局变量还有一种访问方法,就是用$GLOBALS数组来访问。
在函数内部申明的静态变量由函数所有,不会被回收,每次访问该函数时会访问同一变量地址。

示例代码:

PHP
<?php
$count = 30;           //局部变量
$g_value1 = 10;        //全局变量
$g_value2 = 20;        //全局变量
function update_count() {
    $count++;          //局部变量
    global $g_value1;  //全局变量第一种访问方法
    $g_value1++;
    $GLOBALS[g_value2]++; //全局变量第二种访问方法
    static $s_value = 0;  //静态变量
    $s_value++;
    print "$s_value is $s_value";
}
update_count();
print "$count is $count";
print "$g_value1 is $g_value1";
print "$g_value2 is $g_value2";
update_count();

结果为:

$s_value is 1
$count is 30
$g_value1 is 11
$g_value2 is 21
$s_value is 2

4. 函数参数

在PHP中,函数参数的值传递有值传递和引用传递两种方式。值传递方式以普通方式声明,引用传递要在参数名前加引用符(&)。
在定义函数时,如果对某个参数设置默认值;在调用时,该参数为可变参数,即在调用时可以不设置该参数的值。
在调用函数时,如果设置的非可变参数个数小于函数定义的参数个数,PHP会提出警告,但不会影响执行。调用时,参数多于函数定义的参数个数时不会发出任何警告
在PHP中,提供了三个跟参数有关的函数,func_get_args()func_num_args()func_get_arg($i)。其中func_get_args用于取得传入参数的数组;func_num_args用于取得传入参数的个数;func_get_arg用于以下标取得对应的传入参数值。

PHP
<?php
$a = 1;
$b = 1;
echo add_value($a);
add_value($a, $b);
echo $a;
echo $b;
function add_value($a, &$b, $c = 0) {
    $a++;
    $b++;
    return $c;
}

结果为:

Warning: Missing argument 2 for add_value() ...
012

5. 返回值

在PHP中,函数只能有返回一个值,这个值可以是单一值,也可以是数组或者对象。

6. 可变函数

可以用一个变量来确认要调用的函数。要注意的是语言结构echois_set是不能被这样调用的。如下代码:

PHP
<?php
if (function_exists($func_name)) {
    $func_name();
}

6. 匿名函数

在PHP中,可以用create_function来创建匿名函数,create_function返回的函数名是一个随机生成的标识符。如下代码:

PHP
<?php
$func = create_function('$a, $b', 'return $a+$b;');
echo $func(1,2);    // 3

参考资料:
PHP程序设计,2003,第三章 函数

转载请注明:宇托的狗窝 » PHP学习(7) 函数

发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址