紫郢青索

知之者不如好之者,好之者不如乐之者

用户工具

站点工具


PHP的函数

函数实例

我们先来看一下 PHP循环控制 中提到的: 要打印1 到 1000 或 50 - 500 的自然数。

可以这样来写一个函数

function_1.php
<?php
// 定义函数
function print_numbers($start,$end){
    for($n = $start; $n <= $end; $n++){
        echo $n . PHP_EOL;
    }
}
// 调用函数
print_numbers(1, 1000);
 
print_numbers(50, 500);
?>

函数的定义

<?php
// 定义函数
function print_numbers($start,$end){
    for($n = $start; $n <= $end; $n++){
        echo $n . PHP_EOL;
    }
}
?>

其中 function 是定义函数的关键字

print_numbers 是定义的函数名称

  • 有效的函数名以字母或下划线打头,后面跟字母,数字或下划线

$start$end 是函数的参数

最外层 {} 内的代码段就是函数体了。

函数的返回值

函数的返回值就是,函数执行完返回给调用者的数据。

上面的例子中没有返回值。

如果需要返回值,需要在函数体内使用关键字 return , 像下面这样写:

<?php
// 定义函数
function print_numbers_return($start,$end){
    $result = '';
    for($n = $start; $n <= $end; $n++){
        $result .= $n . PHP_EOL;
    }
 
    return $result;
}
?>

函数的调用

调用没有返回值得函数

调用没有返回值得函数 print_numbers($start, $end)

<?php
$result = print_numbers(1, 5);
var_dump($result);
?>

执行结果

1
2
3
4
5
NULL

如果没有返回值,调用函数接受到的是 NULL。

调用有返回值的函

调用有返回值的函数 print_numbers_return($start, $end)

<?php
$result = print_numbers_return(1, 5);
var_dump($result);
?>

执行结果

string(10) "1
2
3
4
5
"

返回的是一个字符串。

可变函数

函数调用时,函数名称可以是一个变量,例如:

$fun = "print_numbers_return";
$result = $fun(1, 5);
var_dump($result);

这样就可以通过 $fun 变量调用 函数 print_numbers_return()

还可以使用可变函数的语法调用一个对象的方法:

<?php
class Foo
{
    function Variable()
    {
        $name = 'Bar';
        $this->$name(); // This calls the Bar() method
    }
 
    function Bar()
    {
        echo "This is Bar";
    }
}
 
$foo = new Foo();
$funcname = "Variable";
$foo->$funcname();   // This calls $foo->Variable()
 
call_user_func(array($foo, 'Variable'));
 
?>

函数的参数

$start$end 是函数的参数。

函数的参数可以设置默认值,有默认值得参数要求优先从右向左设置。 例如

// 定义函数
function print_numbers($start,$end = 4){
    $result = '';
    for($n = $start; $n <= $end; $n++){
        echo $n . PHP_EOL;
    }
}

调用

<?php
print_numbers(1);
print_numbers(3);
print_numbers(5, 8);
?>

输出:

// 调用 print_numbers(1);
1
2
3
4
// 调用 print_numbers(3);
3
4
// 调用 print_numbers(5, 8);
5
6
7
8