3.6 PHP内置函数
PHP内置函数
PHP内置函数非常丰富,涉及到Web开发的各个方面。下面分别以工具函数、数学函数、日期函数和文件包含函数为例来详细介绍在开发中经常会使用到的一些常用PHP自带函数。
3.6.1 工具函数
工具函数主要是指一些在开发过程中经常使用的函数,它们很具通用性。比如,exit()函数可以终止程序运行,empty()函数可以检测变量是否为空值等,都统称为工具函数。
1.die()和exit()
其实die()和exit()这两个函数在PHP中指向的是同一个函数,die()是exit()函数的别名。exit()函数的语法格式如下:
void exit ( [string $status] )
如果参数status是字符串,则该函数会在退出前输出字符串;如果参数status是整数,这个值会被用做退出状态。退出状态的值在0~254之间,状态0用于成功地终止程序。exit()函数没有返回值。
下面是使用exit()函数提前终止函数的示例,代码如下:
代码3-11光盘\codes\第3章\3.6\exit.php
<?php $var="三扬科技"; echo $var; exit(0); echo"这句话没有被执行!"; ?>
该程序被执行时,运行结果如图3-11所示。
图3-11 使用exit()函数
根据运行结果可以看出,语句“echo"这句话没有被执行!";”没有被正常执行,这是因为遇到了exit()函数,脚本被提前终止运行。
2.empty()
empty()函数用于检查变量是否为0值或者空值,如果变量为0值或者空值则返回true,否则返回false。使用empty()函数检测变量时,在""、0、"0"、NULL、FALSE、array()、$var等情况下都将被认为是空的。其语法格式如下:
bool empty ( mixed $var )
参数var用来指定要检测的变量名称。
下面是使用empty()函数检测变量的例子,代码如下:
代码3-12光盘\codes\第3章\3.6\empty.php
<?php $sunyang = "三扬科技"; if(empty($sunyang)){ //判断变量$sunyang是否为空值 echo "\$sunyang为0或者空值<br>"; }else{ echo "\$sunyang的值为\"".$sunyang."\"<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的值为\"".$zero."\"<br>"; } ?>
该程序被执行时,运行结果如图3-12所示。
图3-12 使用empty()函数
3.isset()和unset()
isset()函数用于检测是否已经为变量设定值,如果该变量已经设定值则返回true,否则返回false。其语法格式如下:
bool isset (mixed $var )
参数var用来指定要检测的变量名称。
unset()函数用于将已经被赋值的变量删除,使该变量成为一个没有被赋值的变量,该函数的返回值永远为true,其语法格式如下:
void unset ( mixed $var )
参数var用来指定要检测的变量名称。
下面是使用isset()函数提前终止函数的示例,代码如下:
代码3-13光盘\codes\第3章\3.6\isset.php
<?php $var1=$sanyang; $var2=null; if(isset($var1)){ //判断变量$var1和$var2是否已经被设定值 echo"\$var1和\$var2已经被设定值"; }else{ echo"\$var1和\$var2没有被设定值"; } ?>
该程序被执行时,运行结果如图3-13所示。
图3-13 使用isset()函数
4.settype()
settype()函数是用来设置变量类型的,如果设置变量类型成功该函数会返回true,否则返回flase。settype()函数的语法格式为:
bool settype ( mixed &$var , string $type )
在上述语法中涉及到的参数说明如下。
● var:指定需要设置数据类型的变量名称。
● type:指定需要设置的数据类型,该参数可取值如表3-1所示。
表3-1 type参数可取值说明
下面是使用settype()函数为变量设置数据类型的示例,代码如下:
代码3-14光盘\codes\第3章\3.6\settype.php
<?php $sunyang = "123三扬科技"; echo "\$sunyang的原值为:".$sunyang."<br>"; settype($sunyang,"integer"); //使用settype()为变量$sunyang设置数据类型 echo "\$sunyang的新值为:".$sunyang; ?>
该程序被执行时,运行结果如图3-14所示。
图3-14 使用settype()函数
5.is_bool()
is_bool()函数可用来检测某变量是否为布尔型,如果变量为布尔类型时该函数会返回true,否则返回false,其语法格式为:
bool is_bool ( mixed $var )
参数var用来指定需要检测的变量名称。
下面是使用is_bool()函数来检测变量是否为布尔类型的示例,代码如下:
代码3-15光盘\codes\第3章\3.6\is_bool.php
<?php $sunyang=true; if(is_bool($sunyang)){ //判断变量$sunyang是否为布尔类型 echo"\$sunyang是布尔类型的"; }else{ echo"\$sunyang不是布尔类型的"; } ?>
该程序被执行时,运行结果如图3-15所示。
图3-15 使用is_bool()函数
Note
与is_bool()函数类似,PHP变量函数库中还提供了许多以“is_”为前缀的其他数据类型检测函数,例如,要检测某变量是否为字符串类型时,可以使用is_string()函数;而要检测某变量是否为浮点数类型时,可以使用is_float()函数。
3.6.2 数学函数
数学函数主要用来进行长整型和浮点型数据的计算,在函数中使用的数据精度不能超过长整型和浮点型这两个范围。
PHP中常用的数学函数可以参考表3-2,使用这些PHP内部数学函数可以轻松完成编程中的数学运算。在使用数学函数时,只要弄清函数的作用和参数,就可以灵活地使用这些PHP自带函数进行各种数学运算。
表3-2 PHP常用数学函数
下面是部分数学函数的应用示例,代码如下:
代码3-16光盘\codes\第3章\3.6\math.php
<?php $float=7.16; echo "\$float的值为:".$float. "<br>"; echo "四舍五入取整为:".round($float). "<br>"; echo "去尾取整为:".floor($float). "<br>"; echo "进位取整为:".ceil($float). "<br><br>"; $int=1234; echo "\$int的值为:".$int. "<br>"; echo "转换成十六进制为:".dechex($int). "<br>"; echo "转换成八进制为:".decoct($int). "<br>"; echo "转换成二进制为:".decbin($int). "<br>"; ?>
该程序被执行时,运行结果如图3-16所示。
图3-16 数学函数
Note
在PHP中提供了两种方法可以获取圆周率的值π,它们分别为:
● 使用数学常量M_PI来表示圆周率。
● 使是用pi()函数来表示圆周率。
3.6.3 日期函数
日期函数中定义了有关日期的所有相关函数,通过这些函数的使用可以进行日期的修改、更新与格式化输出。
1.time()
使用time()函数可以用来获取当前的时间戳,其中时间戳是指从公元1970年1月1日开始到当前时间的秒数。time()函数能够以整型形式返回当前的UNIX时间戳,其语法格式为:
int time ( void )
我们调用time()函数后会看到其执行结果为一个当前的UNIX时间戳,其运行结果如图3-17所示。
图3-17 使用time()函数
Note
公元1970年1月1日也被称为UNIX纪元,使用UNIX纪元保存日期和时间,可以避免产生著名的千年虫问题。在Windows操作系统中同样是使用UNIX纪元来保存日期和时间的。
2.mktime()
mktime()函数可以返回一个日期的UNIX时间戳。mktime()函数与date()函数结合使用对于日期运算和验证是非常有用的,它可以自动校正越界的输入。其语法格式如下:
int mktime ([ int $hour [, int $minute[, int $second [, int $month [, int $day [, int $year ]]]]]] )
在上述语法中涉及到的参数说明如下。
● hour:用来指定小时。
● minute:用来指定分钟。
● second:用来指定秒数。
● month:用来指定数字表示的月份。
● day:用来指定日期。
● year:用来指定年份。
该函数的参数可以按照从右向左的顺序省略,任何省略的参数都会被设置成本地日期和时间的当前值。
3.date()和gmdate()
date()和gmdate()这两个函数都能将时间按照某种格式以字符串的形式输出。date()函数是按照本地时间输出日期的,而gmdate()函数则是按照格林威治标准时间输出日期的。date()函数和gmdate()函数的语法格式如下:
string date ( string $format [, int $timestamp] ) string gmdate ( string $format [, int $timestamp] )
在上述语法中涉及到的参数说明如下。
● format:指定日期的输出格式。
● timestamp:指定一个UNIX时间戳,如果没有给出该参数,则默认为本地当前时间的时间戳。
日期与时间可以使用的格式如表3-3所示。
表3-3 日期输出格式
举一个具体的date()函数应用例子,代码如下:
代码3-17光盘\codes\第3章\3.6\date.php
<?php echo"date()函数的应用为:".date("Y年n月j日H:i:s a")."<br>"; echo"gmdate()函数的应用为:".gmdate("Y年n月j日H:i:s a",mktime(0,0,0,12,32,2008)); ?>
该程序被执行时,运行结果如图3-18所示。
图3-18 使用date()函数和gmdate()函数
4.getdate()
getdate()函数可用于获得时间及日期信息。getdate()函数的语法格式如下:
array getdate ( [int $timestamp] )
参数timestamp用来指定UNIX时间格式中的时间。如果没有给出时间戳,则默认为是本地当前时间的时间戳。
getdate()函数根据时间戳值timestamp返回各种时间标记值到数组中,数组中的元素及其值对应如表3-4所示。
表3-4 getdate()返回的数组值
举一个具体的getdate()函数应用示例,代码如下:
代码3-18光盘\codes\第3章\3.6\getdate.php
<?php $today = getdate(); print_r($today); ?>
该程序被执行时,运行结果如图3-19所示。
图3-19 使用getdate()函数
5.checkdate()
checkdate()函数是用来检查日期是否有效,其语法格式如下:
bool checkdate ( int $month, int $day, int $year )
在上述语法中涉及到的参数说明如下。
● month:指定要检查日期的月份。
● day:指定要检查的日期。
● year:指定要检查日期的年份。
使用checkdate()函数检查日期的格式,若日期是有效的则返回true,若日期有问题,则返回false。该函数可以用来检查日期是否是有效的范围值,如表3-5所示。
表3-5 checkdate()函数检查日期的有效范围
举一个具体的checkdate()函数应用例子,代码如下:
代码3-19光盘\codes\第3章\3.6\checkdate.php
<?php $month=5; $day=33; $year=2009 $boolean=checkdate($month,$day,$year); if($Boolean==true){ //判断日期“2009-5-33”是否正确 echo"该日期的格式是正确的"; }else{ echo"该日期的格式是错误的"; } ?>
该程序被执行时,运行结果如图3-20所示。
图3-20 使用checkdate()函数
3.6.4 文件包含函数
在实际项目的开发中,通常根据业务逻辑编写的一些工具类或函数都保存在独立的文件中,然后根据需要在使用文件包含函数时将相关类或函数引入。
1.include()与include_once()
使用include()函数可以在指定的位置包含一个文件,当一个文件被包含时,其中所包含的代码和include()函数所在行具有相同的作用域,也就是说,调用文件在该行处可用的任何变量在被调用的文件中也都可用。
比如,有两个文件,一个是“const.php”,另一个是要包含它的“include.php”文件。在“const.php”文件中只定义了两个常量,代码如下:
代码3-20光盘\codes\第3章\3.6\const.php
<?php $OK=1; $ERROR=0; ?>
“include.php”中需要使用include()函数把“const.php”文件包含进来,代码如下:
代码3-21光盘\codes\第3章\3.6\include.php
<?php include "const.php"; echo "OK的值为:".$OK."<br>"; echo "ERROR的值为:".$ERROR; ?>
在“include.php”文件中,因为常量具有全局域属性,所以该程序被执行时,运行结果如图3-21所示。
图3-21 使用include()函数
include_once()函数和include()函数类似,也是用于包含文件,但和include()函数不同的是,使用include_once()函数在包含文件时,如果该文件中的代码已经被包含了,则不会被再次包含。include_once()函数应用于脚本执行期间同一个文件有可能被包含超过一次的情况下,以确保它只被包含一次,从而避免出现函数重定义、变量重新赋值等问题。
2.require()与require_once()
require()函数和include()函数除了在错误处理方式上不同,功能上几乎完全一样。当包含文件失败时,require()函数就会抛出一个致命错误并中止程序的执行,而include()函数则只会抛出警告信息并继续执行程序。
下面使用require()函数来包含一个不存在的文件“noFile.php”,代码如下:
代码3-22光盘\codes\第3章\3.6\require.php
<?php require('noFile.php'); echo "程序执行到了这里"; ?>
该程序被执行时,运行结果如图3-22所示。
图3-22 使用require()函数包含一个不存在的文件
根据运行结果可以看出,程序在执行require() 函数时抛出了错误并停止了执行。如果将代码3-22中的require()函数修改成include()函数,然后执行该程序,此时虽然抛出了警告信息,但是仍然执行到了程序的最后,其运行结果如图3-23所示。
图3-23 使用include()函数包含一个不存在的文件
require_once()函数与include_once()函数功能类似,它在包含文件之前也会先检查当前文件是否被包含过,如果该文件被包含了,该文件就会被忽略,而不会被再次包含。require_once()函数应用于脚本执行期间同一个文件有可能被包含超过一次的情况下,以确保它只被包含一次,从而避免出现函数重定义、变量重新赋值等问题。
3.eval()
eval()函数与include()函数比较相似,其区别在于eval()函数可以动态执行PHP代码,而include()函数无法完成这样的功能。
比如,使用eval()函数将字符串“exit();”作为PHP代码来执行,代码如下:
代码3-23光盘\codes\第3章\3.6\eval.php
<?php $string = "exit();"; eval($str); echo"这条语句不会被执行!"; ?>
该程序在echo语句执行前就已经结束了,所以什么也没有输出。
尽管eval()函数非常有用,但是,由于使用eval()函数时代码的执行效率十分低,所以应该尽量避免使用eval()函数。
Note
在处理用户输入的功能时(比如,表单等),切记严禁直接使用eval()函数,因为它允许用户去执行任意的代码,从而引发严重的安全性问题。