跳到主要内容

PHP 函数

PHP 函数是一段被命名的、完成特定任务的代码。PHP 函数可以是内置的(开发 PHP 的人写的),也可以是用户自己写的。

函数总是以相同的方式求值:

    returnValue = function_name([parameter, ...]);

可以把函数看成一个神奇的盒子,你向盒子里扔进一枚币,盒子就会弹出一个面包。

币就是 parameter,面包就是 returnValue。

如果拥有函数的源代码,你就可以盒子里面是如何收币,如何弹出一个面包。

如果没有源代码,你就很难知道盒子对币做了鉴定和处理,以及盒子如何弹出这个面包。

定义函数

函数名不却分大小写。

注意这里的中括号 [],在编程领域中,一般表示被括住的元素是一个可选元素,即,可以有,也可以没有,有和没有各有各的用途。

    function [&] function_name([parameter, ...]) 
{
// statement list
}

嵌套定义

出于需求,可以在函数内定义函数。

此时,在外部作用域中 innerFunction() 函数也是可见的,但在 innerFunction() 内部,$var1 是不可见的。

    function outerFunction($var1) 
{
function innerFunction($var2)
{
}
}

全局变量

在函数中,可以同构 global 关键字访问全局作用域的变量

    $var1 = 'abc';

function use_global_func($var1)
{
global $var1;
// 这里可以使用 $var1 了
}

静态变量

静态变量用 static 声明,在所有对该函数的调用中是共享的。

    function use_static_func($var1) 
{
static $var1 = 0;

return $var1++;
}

函数参数

函数可以声明任意多个参数。

向函数传递参数有两种方式:一、按值传递;二、按引用传递;

值传递

向函数传递的默认方式。值传递会产生复制,如果传递的对象占用内存很大,这是一个高成本的操作。

引用传递


function by_quote(&$value)
{
$value = $value + 1;
}

$var1 = 3;
by_quote($var1);
echo $a;

默认参数

调用函数时,如果存在参数,但未传递参数,就会使用默认参数的值。


function default_para($var1='L')
{
echo $var1;
}

echo default_para();

可变参数

在函数内部可以使用以下函数获取函数的参数信息。

func_get_args()

func_num_args()

func_get_arg()

类型提示

如果定义函数时,定义了参数类型,则要求调用函数时按类型调用,否则会产生运行时错误。

返回值

函数可以返回一个值。

可变函数

由于可以使用 $$ 结构调用函数。

但要注意的是,灵活性和安全性是难以调和的。

匿名函数

一个匿名函数的例子就是自定义排序


$old_world_en = array("Mesopotamia", "Ancient Egypt", "Ancient India", "China");

usort($old_world_en, function($a, $b) {
return strlen($a) - strlen($b);
});

print_r($old_world_en);

这里有一个闭包的概念,向PHP 的闭包内传递变量需要用到 use 关键字


$old_world_en = array("Mesopotamia", "Ancient Egypt", "Ancient India", "China");

usort($old_world_en, function($a, $b) use ($options){
if ($options == 0) {
return rand(0, 2) - 1;
}
return strlen($a) - strlen($b);
});

print_r($old_world_en);