函数

一、 函数分类

● 系统函数,也就是PHP的提供的一些函数库,当然这些函数库既有PHP自带的函数库(如String、Math、Date/Time等),也有外部提供的函数库(GD2、MySQL、MSSQL等)。

如果是PHP自带的函数库的使用非常简单,只要你的操作系统支持PHP,也就支持了PHP的内置函数库。但是如果想使用外部提供的函数库的话,那就必须要有相应的外部文件支持了。还记得我们的配置php.ini中那些extension吗?其实,它们就是一些外部函数所必须的一些动态链接库文件(Dynamic Link Library)。

无论是内置函数库还是外部函数库,它们的功能都是系统提供的,如果我们想经常完成一些功能相同,但是参数值又有变化的某些功能,而这种功能系统函数又没有提供,我们就需要自定义函数了!自定义函数在有的资料中称为方法(Mthod),其实,它们在某种情况下是完全相同的。在面对过程编程中称为函数;而在面向对象编程中称为方法。

● 自定义函数

程序员根据自身的需要而创建的函数

自定义函数的好处在于封装性和重用性。

二、 创建自定义函数

function 函数名称([$参数名称[=默认值[,…]]])

{

执行代码;


[return 返回值]

}
 
注:在自定义函数中除为调试程序的目的,不要带有echo、print等输语句,因为只要带有输出语句,那么就代表你的函数只要以后被调用,那么也就只能输出了!而实际上说,很多的自定义函数的功能是为了实现某种指定的功能,比如说获取文件的扩展名,而获取文件的扩展名又是文件更名的一部分,所以,不能带有输出语句,只能将得到的结果返回,当返回结果后,你是想输出,还是做为其他程序的一部分来出现,那么随便了!
 

三、 调用自定义函数

[$变量名称=]函数名称([[$参数名称=]参数值[,…]]);

下面我们通过几个案例来说一下!

四、 案例

1.产生字符和数字的随机数(版本1)

function random()

{

 $char = "0123456789abcdefghijklmnopqrstuvwxyz";

 for($i=0;$i<4;$i++)

 {

  $chars .= substr($char,rand(0,strlen($char)-1),1);

 }

 return $chars;

}

$rndChar = random();

echo($rndChar);

这样,我们就产生了随机的验证码,这其中substr、strlen是系统函数,具体的功能请大家查阅一下PHP手册!

这个案例中产生的随机数中有可能产生同一个字符出现多次的情况,如果想屏蔽这种情况,只需要将上面的案例做一个小小的修改就可以了!

2. 产生字符和数字的随机数(版本2)

function random()

{

 $char = "0123456789abcdefghijklmnopqrstuvwxyz";

 for($i=0;$i<4;$i++)

 {

  $rndChar = substr($char,rand(0,strlen($char)-1),1) ;
  $char = str_replace($rndChar,NULL,$char);

  $chars .= $rndChar;

 }

 return $chars;

}

$rndChar = random();

echo($rndChar);

以上的这个案例不存在参数,下面我们来看一个带有参数的案例!
当然,产生随机数的方法有很多,我们只是拿出其中的一个来!

3.获取文件的扩展名

在很多PHP程序中经常可以允许用户上传附件或图像,但为保证附件文件或图像文件在服务器上的名称的唯一性,为文件更名就显得尤其重要了!但是文件更名只需要更改主文件名,所以,我们必须要获知文件的扩展名!
function getExtName($file)

{

 $extName = substr($file,strrpos($file,".")+1);

 $extName = strtolower($extName);

 return $extName;

}

$file = "05.gif";

$extName = getExtName($file);

echo($extName);

这个案例中带有一个必选参数,下面我们来看一个带有可选参数的案例!

4.获取当前的时间戳

Unix时间戳指从公元1970-01-01 00:00:00至现在(指UTC时间)所经历的秒数。

function getTimestamp($timezone = 8)

{

 $timestamp = time() + $timezone * 3600;

 return $timestamp;

}

echo(getTimestamp());

如果一个函数中既带有必选参数,又带有可选参数,可选参数必须放置在必选参数之后!

另外,既然系统函数允许嵌套,自定义函数也允许嵌套,但是必须正确的进行嵌套!

函数是编程中非常重要的部分,这其中的理解只能靠大家的造化了!^_^
 
五、包含文件
 
如果有多个文件中都需要调用某个自定义函数,那么可以通过包含文件的方法来实现,也就是说,我们需要将共享的某些信息存储在包含文件中,如果其它页面想调用这些共享信息,我们只需要来调用这个文件就可以了!这样,就可以实现"牵一发而动全身"的目的了!
 
调用包含文件可以通过以下语句来实现:
 
include("文件的位置及全称");
 
include_once("文件的位置及全称");
 
require("文件的位置及全称");
 
require("文件的位置及全称");
 
include和require的区别是:
 
如果指定的包含文件不存在或名称引用错误,include产生一个警告信息;后续代码继续执行;require则产生一个致命错误,停止后续代码的执行!