函数是完成一个特定功能的代码集合,可以分为系统函数和用户函数。用户可以通过创建自定义函数实现特定需要。
1.函数定义语法结构:
PHP中允许用户使用function关键字创建一个自定义函数。语法结构:
function 函数名称(参数1, 参数2, ...)
{
//函数内的代码
}
PHP对函数名称的限制比较少,可以是以字母或下划线开头后跟字母、下划线或数字的任何字符串,而且不区分大小写。括号内是函数的参数,多个参数间用逗号分隔,没有参数时括号也不能省略。大括号内是函数体,在函数体内使用return语句可以指定函数的返回值。示例:
function format_Html($text){ $text=”<u><i><b>$text</b></i></u>”; //应用加粗、斜体和粗体标记 echo $text; //输出格式化后的字符串 }
2.使用函数:
用户函数创建之后,便可以像系统函数一样使用,即通过指定函数名称来调用。如果该函数需要参数,需要在小括号内指定参数的值,注意参数的类型应与定义时一致。
在调用用户自定义函数时,必须确保之前函数已经存在,即函数应先定义再调用。示例:
<table cellspacing=0 cellpadding=0 width”511” border=0> <tr> <td width=”70” height=22>产品名称:</td> <td width=”292” height=22 class=”title”><?php format_Htmi(“企业管理系统”); ?></td> </tr> </table>
3.函数返回值:
有时需要在程序外部使用函数执行的结果,这时就需要在函数内使用return语句指定一个返回值。使用return语句可以为函数返回任何类型的数据。示例:
<?php function getDataAry(){ $resAry=array(95,87,79,80,62,74,90,92); //创建一个数组 return $resAry; //返回该数组 } $ary=getDataAry(); //保存函数返回的数组 foreach ($ary as $i) echo $i.”,“; //遍历数组,输出所有数 ?>
4.函数参数传递方式:
PHP支持的参数传递方式有:按值传递、按索引传递、默认值传递和可变参数列表传递。
1)按值传递:
按值传递是PHP默认的参数传递方式。这种传递方式将为函数外部变量的值创建一个副本,然后赋给函数内部的局部变量。在函数处理完成后,该外部变量的值不发生改变,除非在函数内部声明该外部变量作用域为全局。示例:
<?php function PassByValue($number, $str){ //按值传递参数 $number+=100; //第一个参数增加100 $str.=” World”; //第二个参数附加World字符串 echo “函数内\$number=”,$number, “, \$str”, $str, “<br>”; //输出参数 } $number=3; //创建一个整数作为第一个参数 $str=”hello”; //创建一个字符串作为第二个参数 PassByValue($number, $str); //调用 echo “函数外\$number=”,$number, “, \$str”, $str, “<br>”; //输出调用两个参数的值 ?>
输出结果为:
函数内$number=103, $str=hello World
函数外$number=3, $str=hello
可见,PHP按值传递参数,在函数范围内对这些值的任何改变在函数外部都会被忽略。
2)按引用传递:
在按引用传递参数方式下,实参的内存地址被传递到形参中,在函数内部对形参的任何修改都会影响到实参,因为它们被存储到同一个内存地址。函数返回后,实参的值将会发生改变。引用传递参数的形参和实参都是针对同一个块地址修改。如果希望一个函数参数通过引用被传递,需要在函数定义的参数名前添加符号&来实现。示例:
<?php function PassByValue(&$number, &$str){ //按引用传递参数 $number+=100; //第一个参数增加100 $str.=” World”; //第二个参数附加World字符串 echo “函数内\$number=”,$number, “, \$str”, $str, “<br>”; //输出参数 } $number=3; //创建一个整数作为第一个参数 $str=”hello”; //创建一个字符串作为第二个参数 PassByValue($number, $str); //调用 echo “函数外\$number=”,$number, “, \$str”, $str, “<br>”; //输出调用两个参数的值 ?>
输出结果为:
函数内$number=103, $str=hello World
函数内$number=103, $str=hello World
可见,使用通过引用传递参数的方式时,在函数内对这些值的任何改变,在函数之外也能反映出这些修改。
3)默认值传递:
除了按值传递参数和按引用传递参数的方式外,一个函数还可以使用预先定义好的默认参数。在未指定参数的情况下,函数使用默认值作为函数的参数;在提供了参数的情况下,函数使用指定的参数。示例:
<?php function setFontColor($str, $color=”red”){ //创建带默认值的参数 echo “<font color=’ “.$color.”’.”.$str.”</font></br>”; } setFontColor(“教程”); //使用参数的默认值 setFontColor(“热门商品”, “black”); //修改参数的默认值 ?>
可见,调用函数时,可以传递两个参数,也可以传递一个参数。如果只传递一个参数,则第二个参数使用创建函数时定义的默认值。
在使用PHP的默认参数时需要注意,默认值必须是常量表达式,不能是变量。如果函数有多个参数,可以为多个参数指定默认值。但是,带默认值的参数只能位于参数列表的最后,即一个默认值参数的右边不能出现没有指定默认值的参数。
4)可变参数列表传递:
即参数的数量是不确定的。这种方式需要借助3个特殊的函数获取传入的参数,如下表。
func_num_args() func_num_args(void) 返回自定义的函数中传入的参数个数
func_get_arg() func_get_arg($arg_num) 取得第$arg_num+1个参数的值
func_get_args() func_get_args(void) 返回一个包含所有参数的数组
示例:创建一个函数实现对调用时传递的任意数量的数字进行排序并输出
<?php function sortNumbers(){ //排序函数 $count=func_num_args(); //获取实际传递的参数个数 $ary=func_get_args(); //获取所有参数列表的数组 rsort($ary); //对数组进行排序 echo “本次排序的共有$count个数字,结果如下:\n”; foreach ($ary as $n) echo ” $n“; //输出排序后的数字 echo ” \n“; } sortNumbers(3, 5, 2, 56, 74, 82, 53, 66, 79, 46); //排序10个数 sortNumbers(59, 26, 46, 31, 89, 47); //排序6个数字 ?>
创建函数时没有参数,在函数内使用func_num_args()函数获得实际调用时参数的数量并保存到变量中,使用func_get_args()函数获得所有传递的参数,并以数组形式保存到变量中。
5.递归函数:
递归函数,是指在一个函数的函数体内调用函数本身。在递归函数中,主调函数又是被调函数,递归函数反复调用其自身,每调用一次进入新的一层。示例:
<?php function sum($number) //递归函数 { if($number!=0) //判断是否停止递归 { return $number+sum($number-1); //在返回值中调用本函数 } } echo ” 100求和结果:“.sum(100); //输出求和结果 ?>
递归函数只需要少量的程序即可描述出解题过程所需要的多次重复计算,大大减少了程序的代码量。但是,必须为递归函数设置停止条件,否则会造成死循环。
6.嵌套函数:
嵌套函数是指在一个函数体中又同时定义一个函数,两个函数形成嵌套关系。此时只有外部函数被调用后,内部函数才能使用。示例:
<?php function start() //外部函数 { echo ”正在开机...\n“; function boot() //内部函数 { echo ”正在加载引导程序...\n“; } function welcome($user) //内部函数 { echo ”欢迎[$user]使用本系统。\n“; } } start(); //调用外部函数,此时内部函数均变得可用 boot(); welcome(“dwenzhao”); ?>
上述代码定义了3个函数,start()是外部函数,其中包含了boot()和welcome()两个函数。因此,为了使用boot()和welcome()函数,必须先调用start()函数,否则将提示函数未定义。
7.判断函数是否存在:
开发大型项目时通常是多人协作,这时就要避免自定义函数名称存在的情况。PHP中可以使用function_exists()函数判断指定的用户函数是否已经存在。示例:
<?php if(!function_exists(“userLogin”)) //判断userLogin()函数是否存在 { function userLogin($u) //如果不存在则创建 { echo ”用户$u登录成功“; } } userLogin(“dwenzhao”); //调用userLogin函数 ?>
还可以使用create_function()函数创建一个临时函数,这个函数名称由PHP动态生成,从而避免名称相同的情况。示例:
<?php if(!function_exists(“userLogin”)) //判断userLogin()函数是否存在 { function userLogin($u) //如果不存在则创建 { echo ”用户$u登录成功“; } } $userLogin=create_function(‘$u’, ‘echo ”用户$u登录成功“;’); echo $userLogin(“dwenzhao”); ?>
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Beispiele für die Definition der PHP-Funktionssyntax. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!