Linux 版 (精华区)

发信人: fgr (乱舞势力), 信区: Linux
标  题: 简便方法
发信站: 紫 丁 香 (Thu Jan 20 19:58:31 2000) WWW-POST

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

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

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

我们已经用过很多次函数了。每次我们查询数据库或检查字符串长度时,我们都是用函数
来做的。这些函数是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标记等。 

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


--
看到五代说:"我喜欢的女孩...很会吃醋,任性,爱哭,易怒...但是,她的微笑...
            就是我最大的幸福..."
看到响子说:"我只要你答应我一件事;哪怕是一天,你一定要比我活得更久,我再也
            不要一个人孤孤单单的活下去了!"
总是很动情。 


※ 来源:·紫 丁 香 bbs.hit.edu.cn·[FROM: 202.118.233.21] 
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.638毫秒