函数是一组以名称作为函数名定义的进程。一系列重复多次的任务被放在一起作为一个函数,函数在需要时被调用和使用。函数有两种类型:内置函数和用户自定义函数,这里我们将解释如何在PHP中使用用户自定义函数。
在看函数的具体用法之前,我们先看看什么时候方便使用函数。
例如,创建一个样本来检查测试结果是通过还是失败。
$math = 84;
$english = 62;
$yuwen = 78;
print '数学的成绩:';
if ($math > 75){
print '及格';
}else{
print '不及格';
}
print '英语的成绩:';
if ($eigo > 75){
print '及格';
}else{
print '不及格';
}
print '语文的成绩:';
if ($kokugo > 75){
print '及格';
}else{
print '不及格';
}
使用 if 语句确定数学、英语和语文这三门科目的分数。虽然几乎是一样的流程,但是每次都要写一样的描述。(如果用数组和迭代处理,可以写的巧妙一点,不过这次我就不做了,因为我是在讲解函数)。
如果能把这个sample中决定分数并输出的部分分开分组,需要的时候调用会方便。因此,让我们将其重写为一个函数:
function check($subject, $dianshu){
print $subject.'的成绩:';
if ($dianshu > 75){
print '合格';
}else{
print '不合格';
}
}
$math = 84;
$english = 62;
$yuwen= 78;
check('数学', $math);
check('英語', $english);
check('语文', $yuwen);
将程序中重复使用的一系列过程组合在一起,在需要的时候调用。如果把它们放在一起,你只需要写一次相同的过程。其优点不仅是减少了描述量,而且程序更容易看懂,而且由于检查只需进行一次,因此可以减少程序描述中的错误数量。
像这样的一组进程称为一个函数。函数通过被调用来执行功能块中描述的一系列处理。
让我们在前面的示例中添加物理和化学的科目。
function check($subject, $dianshu){
print $subject.'的成绩:';
if ($dianshu > 75){
print '合格';
}else{
print '不合格';
}
}
$math = 84;
$english = 62;
$yuwen= 78;
$wuli = 52;
$huaxue = 92;
check('数学', $math);
check('英語', $english);
check('语文', $yuwen);
check('物理', $wuli);
check('化学', $huaxue);
定义为函数的部分不需要改动任何东西,只需要增加两个调用函数的地方即可。通过将一定量的处理分组为函数,可以高效地创建程序。
我们将在下一节仔细研究如何使用这些功能。
示例代码
では簡単なプログラムで試して見ます。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>PHP TEST</title>
</head>
<body>
<p>PHP TEST</p>
<p>
<?php
function check($subject, $dianshu){
print $subject.'的成绩:';
if ($dianshu > 75){
print '合格';
}else{
print '不合格';
}
print '(点数:'.$dianshu.')';
print '<br />';
}
$math = 84;
$english = 62;
$yuwen= 78;
check('数学', $math);
check('英語', $english);
check('语文', $yuwen);
?>
</p>
</body>
</html>
如果将上述文件放在WWW服务器的文档根目录下,用浏览器访问,将显示如下。
让我们看看函数是如何定义的。基本格式如下。
function 函数名(参数1,参数2,...){
要执行的操作 1;
要执行的操作 2;
}
函数是多个进程的集合,当从程序内部调用时,它按顺序执行块中描述的进程。
由于函数可以被定义多次,所以必须给它们命名以识别它们。可用作函数名称的字符串以下划线或字母开头,后跟下划线、数字和字母。请注意,与变量名不同,它们不区分大小写。(例如,Disp、DISP 和 disp 都具有相同的函数名称)。
参数也成为argument,当您想要将一些值传递给函数时使用。可以根据需要编写尽可能多的参数。检查以下详细信息。
例如:
function hello(){
print 'hello';
}
这个函数的函数名是“hello”,没有参数。当函数被调用时,它只是执行“print ‘hello’;”然后退出。
函数调用
定义函数后,您可以在程序中调用它。调用函数的格式如下:
函数名(参数1, 参数2, ...);
调用函数时,在函数名后的“(” 和 “)”之间指定参数。“(” 和 “)”即使没有参数也不能省略。
此外,当您调用一个函数时,它可能会返回一个值。例如,如果您定义了一个执行计算的函数,它将把计算结果作为返回值返回。在这种情况下,您可以将函数返回的值赋值给变量,方法如下。(返回值也将在下一页确认)。
変数 = 函数名(参数1, 参数2, ...);
由于没有参数,所以以函数名()的形式调用。
function hello(){
print 'hello';
}
hello();
由于没有参数,所以以函数名()的形式调用。
请注意,函数可以在函数调用之前或之后定义。到目前为止的例子中,先定义函数然后调用,但也可以在函数调用之后定义它,如下所示。
hello();
function hello(){
print 'hello';
}
带有函数的程序处理流程
程序通常按照编写的顺序从上到下执行,但是函数内编写的处理直到函数被调用才会执行。进行函数调用时,一旦函数内部的流程被执行,流程将移至函数调用后的下一行。
function hello(){
print 'DEFGJ';
}
print 'ABCDEF';
hello();
print 'GHIMN';
上面先定义了函数,但是并没有执行函数内部的处理。首先执行的是“print ‘ABCDEF’;”。然后使用“hello();”调用该函数。然后,流程移动到函数“hello”一次并执行“print ‘DEFGJ’;”。当进程到达函数内块的末尾时,进程继续到调用函数的“hello();”之后的下一行,并执行“print ‘GHIMN’;”。
示例代码
では簡単なプログラムで試して見ます。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>PHP TEST</title>
</head>
<body>
<p>PHP TEST</p>
<p>
<?php
function test(){
print '处理已移至函数的内部<br />';
print 'GHIMN<br />';
print '函数内部的处理结束<br />';
}
print 'ABCDEFG<br />';
print 'DEFGHK<br />';
test();
print 'JKLMLKJ<br />';
print 'MNOERT<br />';
?>
</p>
</body>
</html>
如果将上述文件放在WWW服务器的文档根目录下,用浏览器访问,将显示如下。
我将检查如何在函数中使用参数。首先,让我们看看何时使用参数。
print '你好。于华。';
print '你好吗?';
// 其他处理
print '你好。姜明。';
print '你好吗?';
与上面相同的过程出现了两次。它们几乎相同,但即使有一处不同,也不能将它们归为一个功能。在这个例子中,只有“你好吗?”部分可以是一个函数。
function greeting(){
print '你好吗?';
}
print '你好。于华。'';
greeting();
// 其他处理
print '你好。姜明。';
greeting();
在这种时候,如果能够在每次调用函数时更改一些值,并在函数调用方指定它们,那就太好了。在这种情况下,如果在调用函数时可以指定名称值,则可以将更广泛的处理组织为函数。
参数是调用函数时传递给函数的值。用参数重写前面的例子看起来像这样:
function greeting($name){
print '你好。'.$name.'同学';
print '你好吗?';
}
greeting('于华');
// 他の処理
greeting('姜明');
在调用方,要传递给函数的值用“(”到“)”描述,如“函数名(值)”。在函数方面,用同样的方式在“(”和“)”之间描述存储传递值的变量。格式如下。
function 函数名(变量名){
// ...
}
函数名(値);
在这个例子中,“于华”在第一次调用函数时作为值传递给函数。在函数方面,值“于华”存储在变量“name”中,并执行函数中的处理。第二次调用时,“姜明”作为值传递给函数。在函数方面,值“姜明”将存储在变量“name”中,函数中的处理将被执行。。
通过使用参数,可以在每次调用和执行函数时指定一个值。
多个参数
您可以根据需要指定任意多个参数,而不仅仅是一个。指定多个参数时,用逗号 (,) 分隔它们。格式如下。
function 函数名(参数1, 参数2, ...){
// ...
}
関数名(値1, 値2, ...);
值按照调用者指定的顺序存储在变量中。至值 1 至变量 1 值 2 存储在变量 2 中,并执行函数中的处理。
例如,指定两个值并输出平均值的函数可以写成如下形式。
function chengji($num1, $num2){
$average = ($num1 + $num2) / 2;
print '平均成绩是'.$average.'。';
}
chengji(10, 8);
chengji(3, 23);
在此示例中,第一个函数调用计算并打印 10 和 8 的平均值。下一个函数调用计算并打印 3 和 23 的平均值。
示例代码
让我们用一个简单的程序来试试吧。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>PHP TEST</title>
</head>
<body>
<p>PHP TEST</p>
<p>
<?php
function chengji($num1, $num2){
$average = ($num1 + $num2) / 2;
print $num1.'和'.$num2.'的平均数是'. $average .'。<br />';
}
heikin(12, 10);
heikin(12, 24);
?>
</p>
</body>
</html>
如果将上述文件放在WWW服务器的文档根目录下,用浏览器访问,将显示如下。
函数在被调用时可以使用参数传递值,但作为函数内部一些处理的结果,值现在可以从函数返回给调用者。例如,执行数值计算的函数可以将计算结果返回给调用者,或者处理字符串的函数可以返回处理后的结果。
使用 return 语句从函数返回一个值。格式如下。
return 返回值;
指定要返回给调用者的值作为返回值。可以为返回值指定除数字、字符串等之外的所有值,例如数组。由于 return 语句不是函数,因此在指定返回值时不需要括号。
如果返回一个返回值,调用该函数的“函数名(参数)”的评估将成为返回值。要保存返回值,将其存储在变量中,如“变量=函数名(参数)”。例如:
function jiafa($num1, $num2){
$sum = $num1 + $num2;
return $sum;
}
$sum = jiafa(11, 9);
print '加法的运算结果是'.$sum.'。';
print '加法的运算结果是'.plus(7, 24).'。';
上面直接描述了返回值保存在变量中使用的情况,以及函数调用本身。
在函数中执行return语句时,返回返回值,函数内的处理到此结束。换句话说,当执行 return 语句时,处理将移至调用该函数的原始语句。请参见以下示例。
function jiafa($num1, $num2){
$sum = $num1 + $num2;
return $sum;
print '不能处理这的程序';
}
$sum = jiafa(10, 8);
当在函数中执行 return 语句时,处理返回给调用者,因此永远不会执行“print ‘不能处理这的程序‘;”。
也可以像下面这样写多个return语句,根据条件改变返回值。
function jiafa($num1, $num2){
if ($num2 == 0){
return NULL;
}
return $num1 / $num2;
}
$result = jiafa(10, 8);
如果第二个参数的值为 0,上面返回“NULL”,否则返回第一个参数除以第二个参数的结果。
与参数不同,只能指定一个值作为返回值。但是,由于也可以指定数组,因此可以使用数组返回多个值。
示例代码
让我们用一个简单的程序来试试吧。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>PHP TEST</title>
</head>
<body>
<p>PHP TEST</p>
<p>
<?php
function jiafa($num1, $num2){
$sum = $num1 + $num2;
return $sum;
}
$sum = jiafa(10, 8);
print '10 + 8的运算结果是'.$sum.'。<br />';
print '7 + 14的运算结果是'.plus(7, 14).'。';
?>
</p>
</body>
</html>
如果将上述文件放在WWW服务器的文档根目录下,用浏览器访问,将显示如下。