一、 使用并定义函数
1. 定义函数
2. 函数的调用方法
二、 函数的返回值
1. 单一返回值
2. 多返回值
三、 函数的重要元素——参数
1. 参数的声明方式
2. 参数的默认值
3. 参数的两种传递方式—值传递和引用传递
四、 函数的作用域
五、 变量函数
六、 PHP内置函数
1. 工具函数
(1) die() 和 exit()
(2) empty()
(3) iset()和unset()
(4) settype()
(5) is_bool()
2. 数学函数
3. 日期函数
(1) time()
(2) mktime()
(3) date() 和 mgdate()
(4) getdate()
(5) checkdate()
(6) 文件包含函数
函数具有控制程序设计的复杂性,提高软件的重用性、可维护性和开发效率等优点。
一、使用并定义函数
1.定义函数
PHP中,函数使用关键字function来定义,通常由函数名称、参数、函数体和返回值4部分组成。自定义函数的语法格式如下:
function 函数名称([参数1,参数2,参数3……]){
函数体;
return 返回值;
}
上述语法格式中:
? 函数名称,用来标识某个函数,PHP中不允许函数重名。函数名只能包含数字、字母、下划线,且不能用数字开头。函数名不区分大小写。
? 参数,作用是使函数外部能够向函数中传递数值。可以没有,也可以有一个或多个。
? 返回值,作用是在函数执行成功后,将执行结果返回给函数外部。可以使任何数据类型,也可以没有返回值。
? 函数体,该函数的执行规则,任何有效的PHP代码都可以出现在函数体中。函数体内也可以调用PHP内置函数或者其它自动以函数。
示例:
自定义一个函数,该函数实现的功能是计算n的阶乘。代码如下:
<?php
function nRecursion($n){
$s = 1;
for($i=1;$i<=$n;$i++){
$s=$s*$i;
}
return $s;
}
var_dump(nRecursion(4));  // 调用函数 输出:int(24)
?>
2.函数的调用方法
在PHP中,可以直接使用函数名进行函数的调用。如果函数带有参数,调用时需要传递相应参数。调用系统内置函数和自定义函数的方法都是相同的。语法如下:
function 函数名([参数1,参数2,参数3……]);
以下调用函数round()的示例,round()是PHP内置函数,其语法格式如下:
float round(float $var[,int $precision])
该函数的功能、参数和返回值的含义:
? 功能: 实现对浮点数进行四舍五入的功能,并可以指定从浮点数的位置开始进行四舍五入。
? 参数: 该函数有两个参数,分别是var和precision。参数的含义是从浮点数var的第precision个长度的位置开始进行四舍五入。中括号标识可选参数。
? 返回值:该函数返回值的类型是float型。
<?php
$floatNumber = 725.386;
echo "原浮点数为:".$floatNumber."<br />";
$result1 = round($flo
atNumber);  // 725
echo "从小数点处进行四舍五入的结果为:".$result1."<br />";
$result2 = round($floatNumber,2);  // 725.39
echo "从小数点后两位处进行四舍五入的结果为:".$result2."<br />";
$result3 = round($floatNumber,-2);  // 700
echo "从小数点前两位处进行四舍五入的结果为:".$result3;
?>
如果调用一个不存在或错误的函数,系统报错,可根据报错信息进行排错。
? 检查该函数是否正确存在与PHP文件中。
?
检查函数名称拼写是否正确。
? 还有可能是所调用的函数是PHP扩展的一部分,而该部分并没有被载入。
二、函数的返回值
函数成功执行后,可通过return语句将结果返回给函数外部。函数返回值可以使任何数据类型,也可以是数组或者对象。若不需要返回值,则可省掉return语句。
1.单一返回值
使用return语句可以且只能返回一个值,在return语句执行后,整个函数的运行终止。
以下是通过函数计算两个数乘积并返回其结果的例子,代码如下:
<?php
function multiplication($a,$b){
$result = $a * $b;
return $result;
}
echo "3 * 10 = ".multiplication(3,10);
?>
2.多返回值
如果需要函数返回多个值时,可以通过数组的形式来得到多个返回值。示例如下:
<?php
function number(){
Return array(1,2,3);
}
list($one,$two,$three)=number();  // list函数把数组中的值赋给一些变量
echo "$one是".$one."<br />";
echo "$two是".$two."<br />";
echo "$three是".$three."<br />";
?>
三、函数的重要元素——参数
所谓参数,就是在函数声明的圆括号内的变量或常量,同通过参数向函数传递信息。
1.参数的声明方式
参数是一个用逗号作为分隔符的表达式列表,如果参数不存在则参数列表为空。在PHP中,声明参数时不需要指定该参数的数据类型,它可以自动识别变量类型,然后对其做相应操作。
比如,以下函数可以计算两个数的最大公约数,在声明时只需在括号内定义两个变量即可。
<?php
function divisor($m,$n){
if($m%$n==0){
return $n;
}else{
return divisor($n,$m%$n);
}
}
$a = 12;
$b = 8;
$result = divisor($a,$b);
echo $a."和".$b."的最大公约数为:".$result; // 12和8的最大公约数为:4
?>
2.参数的默认值
PHP中允许将参数定义成C++风格的默认值,也就是说允许实参与形参个数不同,实现的方法是在形参列表中对一个或几个形参指定默认值,该默认值必须为常量表达式。默认参数必须放在非默认参数的右侧,否则可能会得到与预期不同的执行结果。
比如,程序中参数b含有默认值,而参数a和c没有默认值,代码如下:
<?php
function printVar($a,$b=10,$c){  // 默认参数$b没在非默认参数右侧,故报错
echo "a = $a b = $b c = $c";
}
$a = 1;
$c = 3;
echo printVar($a,$c);
?>
【P
HP中不带可以使用数值类型作为默认参数,还允许使用数组,特殊类型NULL做默认参数。】
3.参数的两种传递方式—值传递和引用传递
在PHP中,参数有两种传递方式,分别是值传递和引用传递。值传递是将要传递的值作为一个副本进行传递;而引用传递则是引用对象的内存地址。
① 值传递
参数在调用函数前后不发生改变,传给函数的只是这个参数的值。即在传递参数时函数范围内对这些值的改变都在函数外被忽略掉。PHP中除对象类型外,其它类型的参数传递方式都是值传递。
下面是一个使用值传递方式来增加变量的示例,代码如下:
<?php
function change($number){
$number = $number +1;  // 是变量$number的值增加1
echo "函数内部\$number的值为:".$number."<br />"; // 内部变量11
}
$number = 10;
change($number);  // 调用change()函数
echo "函数外部\$number的值为:".$number; // 显示函数外部变量$number
?>
② 引用传递
如果要在函数内部修改参数值,且函数的外部也能同时改变该参数值,可以使用引用传递。引用传递参数的方式为在参数前面添加“&”符号。
在引用传递方式中,当参数传给函数时,函数不会再创建一个新变量,而是直接获得一个原有变量的引用。可以像使用其他变量一样使用引用变量,其区别在于:不是获得变量本身的值,而是指向原来的值。任何对该引用的修改都会影响到原始变量值。
下面是一个通过引用传递来增加变量值的示例,代码如下:
<?php
function change($number){
$number = $number +1;
echo "在函数内部\$number的值为:".$number."<br />";  // 显示内部值11
}
$number = 10;
chang(&$number);  // 调用chang()函数
echo "在函数外部\$number的值为:".$nubmer; // 显示外部$number的值11
?>
四、函数的作用域
PHP中,函数的作用域用来控制函数及函数中变量在哪里是可见并且可用的。不同的编程语言有不同的变量作用域规则,PHP中的函数及函数中的变量作用域规则如下:
? 函数的作用域  指在函数内部声明的变量作用域是从声明的那条语句开始是到函数的末尾。
? 全局作用域 指在函数外部声明的变量作用域是从那条语句开始到声明所在的文件末尾。
? 使用关键字global或$GLOBALS[]数组可以手动指定一个函数中使用的变量为全局变量。
? 通过参数列表传递给函数的变量,对于函数来说是局部变量,但是在传递时带有引用符号(&)的除外。
? 可以使用unset()函数手动删除一个变量,该变量也在其作用域内同时被销毁。
? 使用require()和include()这两个函数并不会影响到作用域。如果它们用于函数内部,则函数作用域适用。如果它们不在函数内部,则全局作用域适用。
例代码如下:
<?php
$price = 0;    // 定义全局变量
function sale($price){
$price = 100;    // 定义局部变量
$newPrice = $price*0.95; // 促销商品为9.5折
echo "商品的原价为:".$price."<br />";
return $newPrice;  // 返回变量$newPrice的值
}
echo "商品的折扣价为:".sale($price)."<br />";
echo "商品的原价为:".$price;
?>
五、变量函数
PHP支持变量函数的概念,如果一个变量名称的后面带有圆括号,例如:$var()、$variable()等,虽然这些变量名称并不是一个合法的函数名称,但是类似的函数调用却可以正确执行。因为PHP可以去除保存在$var变量中的值,在程序中寻相同名称的函数,然后尝试调用执行该函数,这就是变量函数的工作原理。
下面是一个使用变量函数实现计算某长方形面积的功能,代码如下:
<?php
function caculate($length,$width){
$area = $length * $width;
echo "长方形的长为:".$length."<br />";
echo "长方形的宽为:".$width."<br />";
echo "长方形的面积为:".$area."<br />";
}
$length = 10;
$width = 5;
$myFunction = "caculate";
$myFunction($length,$width);
?>
变量函数的优点是可以增加程序的灵活性,但是滥用变量函数会降低PHP代码的可读性,使程序逻辑变得难以理解,为代码的维护带来极大的困难,甚至可以引发一系列的安全问题。所以在编程中应该尽量少用或者避免使用变量函数。
六、PHP内置函数
PHP内置函数非常丰富,涉及到Web开发的各个方面。如:工具函数、数学函数、日期函数、文件包含函数等。
1.工具函数
主要指一些在开发过程中经常使用的函数,它们很具通用性。如:exit()函数可以终止程序运行,empty()可以检测变量是否为空值等,都统称为工具函数。
(1)die() 和 exit()
其实die() 和 exit()两个函数在PHP中指向的是同一个函数,die() 是 exit()函数的别名。
函数exit()语法如下:
void exit([string $status])
如果参数status是字符串,则该函数会在退出前输出字符串;如果参数status是整数,这个值会被用作退出状态。退出状态的值在0~254之间,状态0用于成功终止程序。exit()函数没有返回值。
下面是使用exit()函数提前中止函数的示例,代码如下:
<?php
$var = "PHP开源技术";
echo $var;
exit(0);  // 终止函数,其后的部分不被执行
echo "这句话没有执行";  // 仅输出:PHP开源技术
?>
(2)empty()
empty()函数用于检查是否为0值或者空值,如果变量为0或者空值则返回true,否则返回false。使用false。使用该函数检测变量时,在“”、0、“0”、NULL、FALSE、array()、$var等情况下都将被认为是空的。其语法格式如下:
bool empty(mixed $var)
参数var用来指定要检测的变量名称。下面是empty()函数的示例,代码
如下:
<?php
$var = "PHP笔记";
if(empty($var)){  // 判断变量$var是否为空值
echo "\$var为0或者空值<br />";
}else{
echo "\$var的值为\"".$var."\"<br />";;
}
$null = "";
if(empty($null)){  // 判断变量$null是否为空值
echo "\$null为0或者空值<br />";
}else{
echo "\$null的值为\"".$null."\"<br />";
}
$zero = 0;
if(empty($zero)){  // 判断变量$zero是否为空值
echo "\$zero为0或者空值<br />";
}else{
echo "\$zero的值为\"".$var."\"<br />";
}
?>
(3)iset()和unset()
isset()函数使用于检测是否已经为变量设定值,如果改变量已经设定值则返回true,否则返回false。其语法如下:
bool isset(mixed $var);
参数var用来指定要检测的变量名称。
unset()函数用于将已经被赋值的变量删除,使改变量成为一个没有赋值的变量,该函数的返回值永远为true,其语法格式如下:
void unst(mixed $var)
参数var用来指定要检测的变量名称。下面是使用isset()函数提前终止函数的示例,代码如下:
<?php
$var1 = $variable;
$var2 = null;
if(isset($var1)){
echo "\$var1和\$var2已经被设定值";
}else{
echo "\$var1和\$var2没有被设定值";
}
?>
(4)settype()
settype()函数是用来设置变量类型的,如果设置变量成功该函数会返回true,否则返回false。settype()函数的语法格式为:
bool settype(mixed & $var,string $type)
? var:指定需要设置数据类型的变量名称。
? type:指定需要设置的数据类型,该参数可取值如下:
参数值 说    明
boolean 表示布尔类型
integer 表示整型
float 表示浮点型
string 表示字符串类型
array 表示数组类型
object 表示对象类型
null 表示空
下面是使用settype()函数为变量设置数据类型的示例,代码如下:
<?php
$php = "PHP技术";
echo "\$php的原值为:".$php."<br />";
settype($php,"integer");
echo "\$php的新值为:".$php;
?>
(5)is_bool()
is_bool()函数可用来检测某变量是否为布尔型,如果变量为布尔类型时该函数会返回true,否则返回false,其语法格式为:
int函数与round函数bool is_bool(mixed $var)
参数var用来指定需要检测的变量名称。
下面是使用is_bool()函数来检测变量是否为布尔类型的示例,代码如下:
<?php
$php = true;
if(is_bool($php)){
echo "\$php是布尔型的";
}else{
echo "\$php不是布尔类型的";
}
?>
与is_bool()函数类似,PHP变量函数库中还提供了许多以“is_”为前缀的其它数据类型检测函数,例如:要检测某变量是否为字符串类型时,可以使用is_string()函数;而要检测某变量是否为浮点数类型时,可以使用if_float()函数。
2.数学函数
数学函数主要用来进行长整型和浮点型数据的计算,在函数中使用的数据精度不能超过长整型和浮点型这两个范围。
PHP中常用的数学函数如下表。在使

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。