PHP函数

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
else{
return 0;
}
}
?>
设置了相关变量,并完成了一些初步计算之后,代码清单4-2将调用amortization丁able()函数。因为这个函数会递归地调用自身,所以分期付款表的计算都在函数内进行,结束之后,控制权返回给调用者。
<?php
//使用递归的还贷进度计算机器
//Loan balance
定义函数之后,就可以调用这个函数了,如前例所示。例如,calcSalesTax()可以有如下调用:
calcSalesTax(15.00,0.075);
当然,并非只能向函数传递静态值。也可以像下面这样传递变量:
<?php
$pricetag=15.00;
$salestax=0.075;
calcSalesTax($pricetag, $salestax);
下面是调用这个函数的例子:
<?php
$price =6.99;
$total=calcSalesTax($price);
?>
返回多个值
从函数中返回多个值通常很方便。例如,假设要创建一个函数,从数据库中获取用户数据,比如用户的姓名、电子邮件地址和电话号码,然后返回给调用者。完成这个任务比你想象的要简单得多,使用一个很有用的语言构造list()就可以实现。利用list()构造可以很方便地从数组中获取值,如下:
令人欣慰的是,在现代计算机语言中,有这样一个概念很早就成为了其重要组成部分之一,即将这些重复的过程嵌入在一个命名的代码块中,然后在必要时调用这个代码块。这些代码块称为函数(function),如果将来要修改嵌入的过程,这就提供了一个方便的修改点,而且只需在这一处做修改,因此可以大大地减少出现编程错误的可能性,还能降低维护的开销。
//Calculate payment principal
$paymentPrincipal=round($periodicPayment-$paymentInterest,2);
//Deduct principal from remaining balance
$newBalance=round($balance-$paymentPrincipal,2);
?>
创建函数
对于力图避免在编程中闭门造车、一切都重新发明的程序员来说,虽然PHP的众多函数库是一笔巨大的财富,但迟早都会用到标准包以外的函数,这意味着你需要创建定制函数,甚至创建整个函数库。例如,考虑下面的函数generate footer(),它将输出一个页脚:
<?php
function generateFooter(){
1 .return()
return()语句可以向函数调用者返回任意确定的值,将程序控制权返回到调用者的作用域。如果return()在全局作用域内调用,将终止脚本的执行。再次修改calculate()函数,假设你不希望将计算的销售税立即显示给用户,而是将这个值返回给调用块:
function calcSalesTax($price,$tax=0.0675){
echo $price+$price2+$price3;
}
调用calculate()时,可以只传递$price和$price3,如下:
calculate(10,"",3);
从函数返回值
通常情况下,只依靠函数做某些事情还不够;脚本的结果可能取决于函数的结果,也可能取决于在执行函数时对数据的修改。但是,由于变量的作用域的差异,函数体无法很容易地将信息传递给调用者,那么怎样才能完成这个任务呢?可以通过return()语句向调用者传递数据。
<?php
function calcSalesTax($price,$tax){
$total =$price+($price*$tax);
echo "Total cost:$total";
}
?>
这个函数接受两个参数,名为$price和$tax,它们将在计算中使用。尽管这些参数可能是浮点数,但由于PHP松散类型的特点,你完全可以传递任何数据类型的变量,不过输出可能会出乎意料。此外,可以根据需要定义任意多个参数,在这一点上,PHP没有任何强制限制。
<?php
//还贷计算器函数
function amortizationTable($pNum,$periodicPayment,$balance,$monthlyInterest){
//Calculate payment interest
$paymentInterest=round($balance*monthlyInterest,2);
echo "Name:$name,email:$email,language:$language";
?>
递归函数
递归函数(recursive function)即调用自身的函数,这对于程序员来说,通常有很高的实用价值,常用来将复杂的问题分解为简单的情况,反复做这种处理直到问题解决。
几乎每个入门的递归例子都会使用阶乘计算,这真是太没意思了。我们来做一点更实际的事情,创建一个按揭还贷计算器。具体地,下面的例子将使用递归来创建一个还款进度表,告诉你偿还贷款时每次支付的本金和所需的利息。递归函数amortizationTable()如代码清单4-1所列。它需要4个输入参数:$pNum标识还款编号,$pe.riodicPayment表示每月总的还款额,$balance表示剩余贷款额,$monthly- Interest指定了每月的利率。这些项在代码清单4-2中所列的脚本中指定或确定。
$total=$price+($price*$tax);
return $total;
}
还有一种方式,可以直接返回计算结果,而不需要赋给变量$total,如下:
function calcSalesTax($price,$tax=0.0675){
return $price+($price*$tax);
}
?>
以这种方式传递参数时,称为按值传递(pass by value ) o这就意味看,函数范围内对这些值的任何改变在函数外部都会被忽略。如果希望在函数范围外也能反映出这些修改,则可以按引用传递参数,
下面将介绍有关内容。
按引用传递参数
在有些情况下,可能希望在函数内对参数的修改在函数范围外也能反映,按引用传递参数就可Βιβλιοθήκη Baidu满足这种需要。按引用传递参数(也称传引用)要在参数前加上&符号。下面是一个例子:
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));
$total=$price+($price*$tax);
echo "Total cost:$total";
}
这样如果没有销售税,就可以如下调用calcSalesTax,而不指定第二个参数:
calcSalesTax(42.00);
如果指定了多个可选参数,可以选择性地传递某些参数。考虑下面这个例子:
function calculate($price,$price2="",$price3=""){
函数
计算机编程之所以存在,就是为了自动完成各种任务,从按揭还贷计算到确定一个人每天最佳的卡路里摄入量,这些任务可谓林林总总,形式各异。不过,随着这些任务变得越来越复杂,你会发现它们往往由另外一些重复的任务组成。例如,在电子商务应用中,可能需要在多个不同页面上验证一个E-mail地址,如新用户注册来使用一个网站时,有人希望增加一条产品评论时,或者一个访问者订阅一份刊物时,此时都需要验证E-mail地址。用来验证E-mail地址的正则表达式相当复杂,因此最好在一个地方维护,而不要把它嵌入到多个不同的页面中,特别地,如果需要针对一个新的域(如.museum)修改正则表达式,这一点更显重要。
调用函数
标准的PHP发行包中有1000多个标准函数。假设函数库已经编译到安装发行包中,或者通过include()或require()语句包含了相应函数库,使得函数可用,那么通过指定函数名就可以调用函数。例如,假设希望计算5的3次方,可以如下调用PHP的pow()函数:
<?php
printf("Five raised to the third power equals %d.",pow(5,3));
<?php
$colors=array("red","blue","green");
list($red,$blue,$green)=$colors;
?>
执行了list()构造后,$red, $blue和$green分别赋值为red, blue和green。根据这个示例,你可以想到如何使用list()从函数返回这三个首要的值:
echo "Copyright 2007 W. Jason Gilmore";
}
?>
定义之后,就可以像下面这样调用这个函数:
<?php
generateFooter();
?>
按值传递参数
你会经常发现向函数传递数据很有用。举一个例子来说,创建一个函数,它要确定销售税率,然后将税费增加到价格上,从而计算商品的总价:
//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));
<?php
function calcSalesTax($price,$tax=0.0675);
$total=$price+($price*$tax);
echo "Total cost:$total";
?>
仍可以为$tax传递其他的税率。只有如下调用salestax()时才会使用默认值6.75%:
$price=15.47;
<?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.
# If balance not yet zero ,recursively call amortizationTable()
if($newBalance>0){
$pNum++;
amortizationTable($pNum,$periodicPayment,$balance,$monthlyInterest);
$balance=10000.00;
//Loan interest rate
$tax+=4;
}
calculateCost($cost,$tax);
printf("Tax is %01.2f%%<br/>",$tax*100);
printf("Cost is:$%01.2f",$cost);
?>
注意,$tax的值依然相同,但$cost已经改变。
默认参数值
可以为输入参数指定默认值,在没有提供其他值的情况下,就会把这个默认值自动赋给该参数。下面来修改前面销售税的例子,假设你的销售主要集中在俄亥俄州的弗兰克林县。可以指定$tax的默认值为6.75%,如下:
calcSalesTax($price);
默认参数值必须位于参数列表末尾或为常数表达式,而不能指定函数调用或变量等非常量值。可以指定某个参数为可选(optional)参数,为此,这些参数需要放在参数列表末尾,而且要指定其默认值为空,如下:
function calcSalesTax($price,$tax=""){
<?php
function retrieveUserProfile(){
$user[]="Jason";
$user[]="Jason@example.com";
$user[]="English";
return $user;
}
list($name,$email,$language)=retrieveUserProfile();
相关文档
最新文档