高级数据库技术 上一层 [软件下载] [累计得分] [教学论坛] [林定移教学辅助服务器] [关于林定移]

第三章4

第一章1 第二章1 第三章1


PHP/MySQL教程
第1节 基本函数
第2节 数据校验
第3节 处理常规表达式
第4节 简便方法
第5节 进阶技巧

[第一章][第二章][第三章]

 

第4节 简便方法

前面的常规表达式怎么样?很有意思,是吧?要是在每个需要检查电子邮件地址的程序里都写上这么一段程序,那才真叫有意思呢?!想想看吧,得写那么乱七八糟的一段程序,还得写上那么多遍!...不过,当然了,还有更简便的方法。

还记得前面我们学过的头文件吗?它能让我们写一段程序,象是这个电子邮件地址的检查程序,然后把这段程序包含进多个程序里面去。这样,我们要改写这段程序时,只须改动一处就行了,不用修改多个文件。

但是,要做到这一点,我们必须用到函数。

我们已经用过很多次函数了。每次我们查询数据库或检查字符串长度时,我们都是用函数来做的。这些函数是PHP自带的。如果您是位热心的程序员,您可以用自己编写的函数来扩充PHP本身的功能。但对本教程而言,这部分内容是太过高深了一点。我们要创建的函数不是那一种,而是写在PHP脚本程序内部的函数。

函数就是一段程序代码,我们可以把一个或多个值传给这段代码,然后这段代码会处理我们传给它的数据并返回一个值。根据实际需要,函数可以很简单,也可以十分复杂。但是只要我们传进去一个数,然后能得到一个数,您管它里面有是复杂还是简单呢!这就是函数的可爱之处。

PHP里的函数与C语言里的函数表现差不多。当我们定义函数时,必须指明函数需要接收什么样的数据。一开始好象不太好理解为什么它要接收数据进去,不过这样可以防止发生一些怪异的问题。函数之所以能做到这一点,是因为函数里面的变量都是私有变量,也就是说,它只在该函数内部存在。例如,您在程序中有一个变量叫$myname,如果您创建了一个函数,想让这个函数也使用那个$myname变量(值也相同),那是不行的。您可以在函数内部创建一个变量,名字也叫$myname,这两个变量可以各平相处,而各自取不同的值。不过我可不建议您这么做!您如果真的这么做了,等半年后您再来修改这样的程序时,您可能就会被弄糊涂了。

那我们现在就来创建一个函数,先来个简单的。我们要给它取个名字,指定它要接收什么的变量。在调用这个函数之前,我们还得定义这个函数。


<html>

<body>

<?php



function  addnum($first, $second) {

	$newnum = $first + $second;

	return $newnum;

}

echo addnum(4,5);

?>



</body>

</html>

这就行了!首先,我们创建了第一个自己的函数。我们定义了两个新变量,$first$second,注意它们是怎样被定义的。在调用这个函数时,要给这两个变量按它们出现的顺序赋好值 - 4赋给$first,5赋给$second。然后我们简单地把这两个数加在一起,返回结果。“返回”在这里的意思是把结果送回去。在程序最后部分我们把数字9显示出来。

我们再来创建一个函数,让它对我们的数据库应用有点帮助。一个能妥善处理错误的函数怎么样?试试下面的程序:


<html>

<body>

<?php



function  do_error($error) {


	echo  "噢,好象有点儿问题...<br>";


	echo "系统报告的错误是:$error.\n<br>";


	echo "最好是暂时关闭网站并通知系统管理员。";

	die;

}



if (!$db = @mysql_connect("localhost","user", "password")) {


	$db_error = "无法连接到MySQL数据库";

	do_error($db_error);

}

?>



</body>

</html>

在运行程序之前,试试关闭MySQL数据库,或使用错误的用户名或口令。您会看到友好的、有用的错误信息 。细心的朋友会注意到在mysql_connect()函数之前的那个@符号。它会抑制系统错误信息,使得程序只能从do_error()函数那里得到有关的错误信息。您还会注意到,我们可以把一个在别处定义的变量作为参数传给函数,而不是在调用时直接赋一个值。

还记得我过函数使用的是私有变量吧?这话说得不完全对。事实上,您可以让函数访问到函数外面的变量。您可能要写一个函数,用它来查询数据库,然后把结果显示在多个网页中。您不想每次都把数据库连接标识都传给函数。在这种情况下,您可以把连接标识定义成一个全局的变量。例如:


<html>

<body>

<?php



function  db_query($sql) {

	global $db;

	$result = mysql_query($sql,$db);

	return $result;

}



$sql = "SELECT * FROM mytable";

$result = db_query($sql);

?>



</body>

</html>

这是个很简单的函数,但重要的是,您在调用这个函数时,不必传递$db变量 - 您可以通过 global这个字使得函数可以访问到该变量。在这条语句中您可以定义多个全局变量,各个全局变量之间用逗号隔开。

最后,您可以使用可选参数,这样看起来您已经是真正的专家了。这里面关键的一点是,在函数中定义参数时要给它指定一个缺省值。然后您在调用这个函数时,如果不为该参数变量指定其他值,那么函数会自动把缺省值赋给这个变量。如果您指定了其他值,那么缺省值就不起作用了。

不太明白?比方说,您在连接数据库时,几乎总是连接到相同的服务器,并且使用相同的用户名和口令。不过有时候,您也需要连接到其他的服务器。看看下面的程序:


<html>

<body>

<?php



function  db_connect($host = "localhost", $user="username", $pass="graeme") {

	$db = mysql_connect($host, $username, $password);

	return $db;

}



$old_db = db_connect();



$new_host = "site.com";

$new_db = db_connect($new_host);

?>



</body>

</html>

很“酷”是不是?在定义函数时,函数内部用到的变量也定义好了。第一次调用这个函数时,全部参数变量都是用的缺省值。第二次调用时,服务器名变了,而用户名和口令没有变。真是太棒了!

想想您在什么地方还能用到函数。您可以用函数来作数据校验,来完成常用的功能,等等。在对Web网页上显示的文字作处理时,我用到了很多函数。我可以一次完成对文字的检查、解析和修改,来加入换行符和HTML标记等。

现在,剩下的就是我要给您的一些忠告了。>>


如有关于本站点的问题或建议,请向lin@bnu.edu.cn发邮件。 版权所有(C) 2000-2020  林定移教学辅助服务器