文章教程

6.1.1创建自定义函数

9/17/2020 9:38:49 PM 人评论 次浏览

6.1 创建和调用函数

本节介绍创建自定义函数和调用函数的方法。使用自定义函数可以使程序的结构清晰,更利于分工协作和程序的调试与维护。

6.1.1 创建自定义函数

可以使用function关键字来创建PHP自定义函数,其基本语法结构如下:

function 函数名 (参数列表)

{

函数体

}

参数列表可以为空,即没有参数;也可以包含多个参数,参数之间使用逗号(,)分隔。函数体可以是一条PHP语句,也可以由一组PHP语句组成。

【例6-1】 创建一个非常简单的函数PrintWelcome,它的功能是打印字符串“欢迎使用PHP”,代码如下:

function PrintWelcome()

{

echo("欢迎使用PHP");

}

调用此函数,将在网页中显示“欢迎使用PHP”字符串。PrintWelcome()函数没有参数列表,也就是说,每次调用PrintWelcome()函数的结果都是一样的。

可以通过参数将要打印的字符串通知自定义函数,从而可以由调用者决定函数工作的情况。

【例6-2】 创建函数PrintString(),通过参数决定要打印的内容。

function PrintString($str)

{

echo("$str");

}

变量$str是函数的参数。在函数体中,参数可以像其他变量一样被使用。

可以在函数中定义多个参数,参数之间使用逗号分隔。

【例6-3】 定义一个函数sum(),用于计算并打印两个参数之和。函数sum()包含两个参数参数$num1和$num2,代码如下:

function sum($num1, $num2)

{

echo($num1 + $num2);

}

6.1.2 调用函数

可以直接使用函数名来调用函数,无论是系统函数还是自定义函数,调用函数的方法都是一致的。

【例6-4】 要调用PrintWelcome()函数,显示“欢迎使用PHP”字符串,代码如下:

<?PHP

function PrintWelcome()

{

echo("欢迎使用PHP");

}

PrintWelcome();

?>

如果函数存在参数,则在调用函数时,也需要使用参数。

【例6-5】 要调用PrintString()函数,打开用户指定的字符串,代码如下:

<?PHP

function PrintString($str)

{

echo("$str");

}

PrintString("传递参数");

?>

如果函数中定义了多个参数,则在调用函数时也需要使用多个参数,参数之间使用逗号分隔。

【例6-6】 调用sum()函数,计算并打印100和3之和,代码如下:

<?PHP

function sum($num1, $num2)

{

echo($num1 + $num2);

}

sum(100, 3);

?>

6.1.3 变量的作用域

在函数中也可以定义变量,在函数中定义的变量被称为局部变量。局部变量只在定义它的函数内部有效,在函数体之外,即使使用同名的变量,也会被看做是另一个变量。相应地,在函数体之外定义的变量是全局变量。全局变量在定义后的代码中都有效,包括它后面定义的函数体内。如果局部变量和全局变量同名,则在定义局部变量的函数中,只有局部变量是有效的。

【例6-7】 局部变量和全局变量作用域的例子。

<?PHP

$a = 100; // 全局变量

function setNumber() {

$a = 10;//局部变量

echo($a); // 打印局部变量$a

}

setNumber();

echo("<BR>");

echo($a); // 打印全局变量$a

?>

在函数 setNumber()外部定义的变量$a 是全局变量,它在整个 PHP 程序中都有效。在setNumber()函数中也定义了一个变量$a,它只在函数体内部有效。因此,在setNumber()函数中修改变量$a的值,只是修改了局部变量的值,并不影响全局变量$a的内容。运行结果如下:

10

100

为了更直观地认识局部变量和全局变量,分别在setNumber()函数内部和后面的echo($a)语句上设置断点,然后调试程序,并在断点处查看变量$a的值。局部变量$a的值如图6-1所示,全局变量$a的值如图6-2所示。

figure_0111_0170

图6-1 局部变量$a的值

figure_0111_0171

图6-2 全局变量$a的值

如果要在函数中使用全局变量,可以使用global关键字进行声明,方法如下:

定义全局变量

function 函数名(参数列表)

{

global 全局变量名

使用全局变量

}

【例6-8】 对例6-7进行修改,在setNumber()函数中设置全局变量$a的值,代码如下:

<?PHP

$a = 100; // 全局变量

function setNumber() {

global $a; //指定全局变量$a在函数setNumber()

$a = 10;//设置全部变量$a的值, 而不是局部变量

}

setNumber();

echo($a); // 打印全局变量$a

?>

因为全局变量$a在setNumber()函数中被设置为10,所以运行结果为10。

6.1.4 静态变量

在函数体内可以定义静态变量,静态变量的作用域与局部变量相同,只在定义它的函数体内。与局部变量不同的是,局部变量会在函数结束时被释放,而静态变量的值会被保留下来,下次调用函数时,静态变量的值不会丢失。

可以使用static关键字定义静态变量,语法如下:

static $变量名=初始值;

【例6-9】 静态变量的例子。

<?php

function test()

{

static $count = 1;

echo("第" . $count ."次调用函数<br />");

$count++ ;

}

for($i=1; $i<11; $i++) {

test();

}

?>

运行结果如下:

第1次调用函数

第2次调用函数

第3次调用函数

第4次调用函数

第5次调用函数

第6次调用函数

第7次调用函数

第8次调用函数

第9次调用函数

第10次调用函数

静态变量$count的值在调用函数后被保留。

6.1.5 变量函数

PHP支持变量函数,即通过变量调用函数。在变量名后面添加(),PHP会调用变量值指定的函数。

【例6-10】 变量函数的例子。

<?php

function foo()

{

echo "In foo()<br>\n";

}

function bar($arg = '')

{

echo "In bar(); argument was '$arg'.<br>\n";

}

// echo()函数的外壳函数

function echoit($string)

{

echo $string;

}

$func = 'foo';

$func();  // 调用foo()

$func = 'bar';

$func('test'); //调用bar()

$func = 'echoit';

$func('test'); //调用echoit()

?>

程序中使用$func()函数分别调用了foo()、bar()和echoit() 3个函数。

figure_0113_0172

变量函数不能用于语言结构,如echo()、print()、unset()、isset()、empty()、include()、require()等。如果需要对它们调用变量函数,可以为其定义一个外壳函数,然后调用外壳函数。

教程类别