当前位置:文档之家› PHP函数

PHP函数

echo "Copyright 2007 W. Jason Gilmore";
}
?>
定义之后,就可以像下面这样调用这个函数:
<?php
generateFooter();
?>
按值传递参数
你会经常发现向函数传递数据很有用。举一个例子来说,创建一个函数,它要确定销售税率,然后将税费增加到价格上,从而计算商品的总价:
echo "Name:$name,email:$email,language:$language";
?>
递归函数
递归函数(recursive function)即调用自身的函数,这对于程序员来说,通常有很高的实用价值,常用来将复杂的问题分解为简单的情况,反复做这种处理直到问题解决。
几乎每个入门的递归例子都会使用阶乘计算,这真是太没意思了。我们来做一点更实际的事情,创建一个按揭还贷计算器。具体地,下面的例子将使用递归来创建一个还款进度表,告诉你偿还贷款时每次支付的本金和所需的利息。递归函数amortizationTable()如代码清单4-1所列。它需要4个输入参数:$pNum标识还款编号,$pe.riodicPayment表示每月总的还款额,$balance表示剩余贷款额,$monthly- Interest指定了每月的利率。这些项在代码清单4-2中所列的脚本中指定或确定。
<?php
function retrieveUserProfile(){
$user[]="Jason";
$user[]="Jason@";
$user[]="English";
return $user;
}
list($name,$email,$language)=retrieveUserProfile();
$total=$price+($price*$tax);
return $total;
}
还有一种方式,可以直接返回计算结果,而不需要赋给变量$total,如下:
function calcSalesTax($price,$tax=0.0675){
return $price+($price*$tax);
}
函数
计算机编程之所以存在,就是为了自动完成各种任务,从按揭还贷计算到确定一个人每天最佳的卡路里摄入量,这些任务可谓林林总总,形式各异。不过,随着这些任务变得越来越复杂,你会发现它们往往由另外一些重复的任务组成。例如,在电子商务应用中,可能需要在多个不同页面上验证一个E-mail地址,如新用户注册来使用一个网站时,有人希望增加一条产品评论时,或者一个访问者订阅一份刊物时,此时都需要验证E-mail地址。用来验证E-mail地址的正则表达式相当复杂,因此最好在一个地方维护,而不要把它嵌入到多个不同的页面中,特别地,如果需要针对一个新的域(如.museum)修改正则表达式,这一点更显重要。
<?php
function calcSalesTax($price,$tax){
$total =$price+($price*$tax);
echo "Total cost:$total";
}
?>
这个函数接受两个参数,名为$price和$tax,它们将在计算中使用。尽管这些参数可能是浮点数,但由于PHP松散类型的特点,你完全可以传递任何数据类型的变量,不过输出可能会出乎意料。此外,可以根据需要定义任意多个参数,在这一点上,PHP没有任何强制限制。
printf("<td>$%s</td>",number_format($periodicPayment,2));
printf("<td>$%s</td>",number_format($paymentPrincipal,2));
printf("<td>$%s</td></tr>",number_format($paymentInterest,2));
1 .return()
return()语句可以向函数调用者返回任意确定的值,将程序控制权返回到调用者的作用域。如果return()在全局作用域内调用,将终止脚本的执行。再次修改calculate()函数,假设你不希望将计算的销售税立即显示给用户,而是将这个值返回给调用块:
function calcSalesTax($price,$tax=0.0675){
<?php
$cost=20.99;
$tax=0.0575;
function calculateCost(& $cost,$tax){
//Modify the $cost variable
$cost=$cost+($cost*$tax);
//Perform some random change to the $tax varibale.
echo $price+$price2+$price3;
}
调用calculate()时,可以只传递$price和$price3,如下:
calculate(10,"",3);
从函数返回值
通常情况下,只依靠函数做某些事情还不够;脚本的结果可能取决于函数的结果,也可能取决于在执行函数时对数据的修改。但是,由于变量的作用域的差异,函数体无法很容易地将信息传递给调用者,那么怎样才能完成这个任务呢?可以通过return()语句向调用者传递数据。
调用函数
标准的PHP发行包中有1000多个标准函数。假设函数库已经编译到安装发行包中,或者通过include()或require()语句包含了相应函数库,使得函数可用,那么通过指定函数名就可以调用函数。例如,假设希望计算5的3次方,可以如下调用PHP的pow()函数:
<?php
printf("Five raised to the third power equals %d.",pow(5,3));
?>
以这种方式传递参数时,称为按值传递(pass by value ) o这就意味看,函数范围内对这些值的任何改变在函数外部都会被忽略。如果希望在函数范围外也能反映出这些修改,则可以按引用传递参数,
下面将介绍有关内容。
按引用传递参数
在有些情况下,可能希望在函数内对参数的修改在函数范围外也能反映,按引用传递参数就可以满足这种需要。按引用传递参数(也称传引用)要在参数前加上&符号。下面是一个例子:
<?php
//还贷计算器函数
function amortizationTable($pNum,$periodicPayment,$balance,$monthlyInterest){
//Calculate payment interest
$paymentInterest=round($balance*monthlyInterest,2);
令人欣慰的是,在现代计算机语言中,有这样一个概念很早就成为了其重要组成部分之一,即将这些重复的过程嵌入在一个命名的代码块中,然后在必要时调用这个代码块。这些代码块称为函数(function),如果将来要修改嵌入的过程,这就提供了一个方便的修改点,而且只需在这一处做修改,因此可以大大地减少出现编程错误的可能性,还能降低维护的开销。
<?php
function calcSalesTax($price,$tax=0.0675);
$total=$price+($price*$tax);
echo "Total cost:$total";
?>
仍可以为$tax传递其他的税率。只有如下调用salestax()时才会使用默认值6.75%:
$price=15.47;
定义函数之后,就可以调用这个函数了,如前例所示。例如,calcSalesTax()可以有如下调用:
calcSalesTax(15.00,0.075);
当然,并非只能向函数传递静态值。也可以像下面这样传递变Байду номын сангаас:
<?php
$pricetag=15.00;
$salestax=0.075;
calcSalesTax($pricetag, $salestax);
<?php
$colors=array("red","blue","green");
list($red,$blue,$green)=$colors;
?>
执行了list()构造后,$red, $blue和$green分别赋值为red, blue和green。根据这个示例,你可以想到如何使用list()从函数返回这三个首要的值:
//If new balance<monthly paymentset to zero
if ($newBalance<$paymentPrincipal){
$newBalance=0;
}
printf("<tr><td>%d</td>",$pNum);
printf("<td>$%s</td>",number_format($newBalance,2));
$balance=10000.00;
//Loan interest rate
//Calculate payment principal
$paymentPrincipal=round($periodicPayment-$paymentInterest,2);
//Deduct principal from remaining balance
相关主题