明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

php與mysql3日通-第3天

[摘要]一、基本函數(shù)   歡迎來(lái)到本教程的第三課,也是最后一課。如果您已經(jīng)學(xué)過第一課和第二課,那么您已經(jīng)掌握了MySQL和PHP的安裝及編程的基本知識(shí)。下面我們要介紹PHP的一些其他函數(shù),這些函數(shù)可能會(huì)對(duì)您...
一、基本函數(shù)

  歡迎來(lái)到本教程的第三課,也是最后一課。如果您已經(jīng)學(xué)過第一課和第二課,那么您已經(jīng)掌握了MySQL和PHP的安裝及編程的基本知識(shí)。下面我們要介紹PHP的一些其他函數(shù),這些函數(shù)可能會(huì)對(duì)您有用,使您的開發(fā)過程更加簡(jiǎn)單。首先我們來(lái)看看頭文件。

  大家應(yīng)該知道頭文件的一些基本概念吧?頭文件是一個(gè)外部文件,它的內(nèi)容被包含到主程序中。方法也十分簡(jiǎn)單:在程序文件中引用頭文件名,這個(gè)頭文件就會(huì)包含進(jìn)來(lái)了。在PHP中使用頭文件,會(huì)涉及兩個(gè)函數(shù):include()和require()。這兩個(gè)函數(shù)差別很小,卻很重要,所以我們要認(rèn)真研究一下。require()函數(shù)工作方式與XSSI相類似;不管在程序的哪個(gè)部分使用了這個(gè)函數(shù),只有程序一開始運(yùn)行,頭文件的內(nèi)容就被作為程序本身的一部分來(lái)處理。因此,如果您在一個(gè)條件判定語(yǔ)句中使用了require()函數(shù),那么即使這個(gè)條件即使不為真,頭文件也會(huì)被包含進(jìn)來(lái)。

  而include()函數(shù)只是在執(zhí)行到這一條語(yǔ)句時(shí)才會(huì)把頭文件內(nèi)容包含進(jìn)來(lái)。如果程序沒運(yùn)行到這里,那PHP是不會(huì)管它的。這就意味著,您在條件判定部分使用include時(shí),它會(huì)完全按照您希望的那樣工作。

  還有,如果您用了require()函數(shù),而您指定的頭文件并不存在,那么程序?qū)?huì)停止運(yùn)行并產(chǎn)生錯(cuò)誤。如果您用了include(),程序會(huì)產(chǎn)生一個(gè)警告信息,但是會(huì)繼續(xù)運(yùn)行。您可以親自試一下,運(yùn)行下面的程序,然后把include()換成require(),再比較兩個(gè)程序運(yùn)行的結(jié)果。

<html>
<body>
<?php
include("emptyfile.inc");
echo "Hello World";
?>
</body>
</html>

 
 我喜歡把頭文件的后綴名起成.inc,這樣就可以把頭文件和一般的程序區(qū)分開來(lái)。如果您也這么做,那么請(qǐng)您修改Web服務(wù)器軟件的配置文件,使它能夠把.inc文件也當(dāng)作PHP文件來(lái)處理。否則,黑客們也許會(huì)猜到您的頭文件名,然后用瀏覽器把頭文件內(nèi)容以純文本格式顯示出來(lái)。此時(shí)如果您的頭文件中有些機(jī)密信息(如數(shù)據(jù)庫(kù)口令等)那就糟糕了。

  那么,您用頭文件來(lái)做什么呢?很簡(jiǎn)單!把對(duì)所有程序都通用的那些內(nèi)容放到頭文件里。象HTML文件頭啦,腳注啦,數(shù)據(jù)庫(kù)連接代碼啦,還有您自己定義的一些函數(shù)什么的。把下面的文字拷貝到一個(gè)文件中,保存為header.inc。

<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
?>
<html>
<head>
<title>
<?php echo $title ?>
</title>
</head>
<body>
<center><h2><?php echo $title ?></h2></center>


  然后再創(chuàng)建另外一個(gè)文件,名字是footer.txt,該文件可以包含一些程序結(jié)束時(shí)用到的一些文字和標(biāo)記。

  現(xiàn)在,我們?cè)賮?lái)創(chuàng)建一個(gè)文件,這個(gè)文件里面是真正的PHP程序代碼。試一下下面的代碼,當(dāng)然,您要確認(rèn)MySQL數(shù)據(jù)庫(kù)服務(wù)器正在運(yùn)行。

<?php
$title = "Hello World";
include("header.inc");
$result = mysql_query("SELECT * FROM employees",$db);
echo "<table border=1>\n";
echo "<tr><td>名字</td><td>職位</tr>\n";
while ($myrow = mysql_fetch_row($result)) {
printf("<tr><td>%s %s</td><td>%s</tr>\n", $myrow[1], $myrow[2], $myrow[3]);
}
echo "\n";
include("footer.inc");
?>


  看到發(fā)生了什么事了嗎?頭文件里的內(nèi)容被合并到程序中,PHP把所有的代碼都執(zhí)行了一遍。注意在包含header.inc頭文件之前$title是如何定義的。在header.inc中的代碼可以訪問到它的值。這樣,網(wǎng)頁(yè)的標(biāo)題就被改掉了,F(xiàn)在,您可以在任何程序中使用header.inc頭文件了,您所要做的不過是在每個(gè)主程序中為$title變量取一個(gè)合適的值。

  頭文件、HTML、條件判定語(yǔ)句,還有循環(huán)語(yǔ)句,這些東西加在一些,您就可以用最簡(jiǎn)練的代碼,寫出功能各異的各種復(fù)雜程序來(lái)。在與函數(shù)同時(shí)使用時(shí),頭文件更能發(fā)揮它的效力,我們后面就會(huì)看到。

  接下去,我們會(huì)介紹精彩的部分:數(shù)據(jù)校驗(yàn)。>>



二、 數(shù)據(jù)校驗(yàn)

  想象一下這樣的情形:我們把數(shù)據(jù)庫(kù)都設(shè)計(jì)妥當(dāng)了,現(xiàn)在請(qǐng)用戶輸入信息來(lái)寫到數(shù)據(jù)庫(kù)中去。假設(shè)您有一個(gè)字段是要求數(shù)字類型的信息,比如價(jià)格;而某個(gè)可愛的用戶,卻在這一欄里輸入了文字信息,使得您的應(yīng)用程序的執(zhí)行過程出現(xiàn)了故障。對(duì)您在SQL語(yǔ)句中提供的文字類型的數(shù)據(jù),MySQL數(shù)據(jù)庫(kù)拒不接受,并向您提出了“嚴(yán)正抗議”。

  怎么辦呢?您要用數(shù)據(jù)校驗(yàn)來(lái)防止以上狀況發(fā)生。

  簡(jiǎn)單地講,數(shù)據(jù)校驗(yàn)是指我們對(duì)數(shù)據(jù)(通常是用戶經(jīng)由HTML表格傳過來(lái)的)進(jìn)行檢查,看看它是否遵從一定的規(guī)則。規(guī)則可以是多種多樣的,比如某一數(shù)據(jù)元素不能為空,或者要求某一數(shù)據(jù)項(xiàng)的內(nèi)容必須滿足一定的要求(例如前面的例子中要求必須是數(shù)字而不是文字,或者要求電子郵件地址中一定要包含一個(gè)“@”字等等)。

  數(shù)據(jù)校驗(yàn)既可以在服務(wù)器一端作,也可以在客戶端來(lái)作。PHP是用來(lái)作服務(wù)器一端的數(shù)據(jù)校驗(yàn)的,而JavaScript或其他客戶端腳本編程語(yǔ)言則能夠提供客戶端的數(shù)據(jù)校驗(yàn)功能。本文說的是PHP,所以我們?cè)谶@里著重介紹服務(wù)器端的校驗(yàn)。如果您想找一些現(xiàn)成的、在客戶端運(yùn)行的數(shù)據(jù)較驗(yàn)程序,那您可以去網(wǎng)猴程序庫(kù)看看。

  暫時(shí)把數(shù)據(jù)庫(kù)放在一邊不談,我們先來(lái)說說PHP的數(shù)據(jù)校驗(yàn)方法。如果您愿意(或者說,您想記錄我們要校驗(yàn)的那些數(shù)據(jù)的話),您可以在前面所建的員工數(shù)據(jù)庫(kù)的里加入其他字段,很簡(jiǎn)單,用MySQL的ALTER 語(yǔ)句就行了。

  有好幾個(gè)PHP功能都可以用來(lái)作數(shù)據(jù)校驗(yàn)的工作,有些很簡(jiǎn)單,有些則復(fù)雜一些。其中strlen()是比較簡(jiǎn)單的一個(gè)函數(shù),它能夠告訴我們一個(gè)變量的長(zhǎng)度。

  更復(fù)雜一點(diǎn)兒的是ereg(),這個(gè)函數(shù)可以處理完整的常規(guī)表達(dá)式來(lái)進(jìn)行復(fù)雜的校驗(yàn)。我不想就常規(guī)表達(dá)式講得太深,因?yàn)樵S多書都是專門寫這個(gè)問題的。不過我會(huì)在下一頁(yè)中給出一些簡(jiǎn)單的例子。

  我們先從一個(gè)簡(jiǎn)單的例子開始吧。下面這個(gè)程序要檢查一個(gè)變量是否存在。

<html>
<body>
<?php
if ($submit) {
if (!$first !$last) {
$error = "對(duì)不起,您必須填寫所有的欄目!";
} else {
// 處理表格輸入內(nèi)容
echo "謝謝!";
}
}
if (!$submit $error) {
echo $error;
?>
<P>
<form method="post" action="<?php echo $PHP_SELF ?>">
第一欄: <input type="text" name="名" value="<?php echo $first ?>"><br>
第二欄: <input type="text" name="姓" value="<?php echo $last ?>"><br>
<input type="Submit" name="submit" value="輸入信息">
</form>
<?php
} // if結(jié)束
?>
</body>
</html>


  這段程序中關(guān)鍵的地方是嵌套的條件判定語(yǔ)句。第一層檢查用戶是否按了發(fā)送數(shù)據(jù)的按鈕。如果是,程序接著檢查$first和$last兩個(gè)變量是否都存在。那個(gè) 符號(hào)表示“或”,而 ! 符號(hào)表示“非”。那一句程序用一般語(yǔ)言描述就是“如果$first不存在或者$last不存在,那么就把 $error變量置成下面的值!

  接下來(lái),我們?cè)龠M(jìn)一步,檢查一段文字的長(zhǎng)度。這對(duì)用戶口令的檢查是很有必要的,因?yàn)槟幌胱屇承⿷卸璧挠脩糨斎胫挥幸、兩個(gè)字的口令,可能會(huì)要求他們輸入六位長(zhǎng)的口令。

  我們已經(jīng)講到strlen()這個(gè)函數(shù)了。它只是簡(jiǎn)單地返回一個(gè)數(shù)字,該數(shù)字等于被測(cè)變量中所包含的字符個(gè)數(shù)。這里,我修改一下上面的程序,檢查一下$first與$last的長(zhǎng)度。

<html>
<body>
<?php
if ($submit) {
if (strlen($first) < 6 strlen($last) < 6) {
$error = "對(duì)不起,您必須填寫所有欄目!";
} else {
// 處理表格輸入內(nèi)容
echo "謝謝!";
}
}
if (!$submit $error) {
echo $error;
?>
<P>
<form method="post" action="<?php echo $PHP_SELF ?>">
第一欄: <input type="text" name="名" value="<?php echo $first ?>"><br>
第二欄: <input type="text" name="姓" value="<?php echo $last ?>"><br>
<input type="Submit" name="submit" value="輸入信息">
</form>
<?php
} // if結(jié)束
?>
</body>
</html>


  您可以執(zhí)行一下這段程序,輸入六個(gè)字或少于六個(gè)字的內(nèi)容。這種校驗(yàn)很簡(jiǎn)單,但很有效?>

三、 處理常規(guī)表達(dá)式

  我們稍微講講用ereg()和eregi()兩個(gè)函數(shù)處理常規(guī)表達(dá)式。前面我已經(jīng)提過,這些函數(shù)有的很簡(jiǎn)單,有的很復(fù)雜,看您的實(shí)際需要而定。

  使用常規(guī)表達(dá)式,您可以對(duì)一個(gè)字符串進(jìn)行檢查,搜索其中的一些結(jié)構(gòu)模式,判定這些模式是否滿足您的規(guī)定。最普遍的用法包括檢查電子郵件地址是否有效(當(dāng)然,即使這種辦法判定有效,也不能保證郵件地址真的存在)。

  我們?cè)谶@里不細(xì)究常規(guī)表達(dá)式的復(fù)雜細(xì)節(jié)了,僅僅給出幾個(gè)實(shí)例。您可以使用上一頁(yè)中用過的表格 - 把相應(yīng)的程序代碼復(fù)制過來(lái),添加到下面的代碼段中,就可以看到它是怎樣工作的。

  首先,我們要確保表格中各欄只能輸入字母。下面的常規(guī)表達(dá)式在用戶輸入一個(gè)或多個(gè)小寫字母時(shí)判定為真,而輸入數(shù)字是不允許的:

if (!ereg("[a-Z]", $first) !ereg("[a-Z]", $last)) {

現(xiàn)在我們更進(jìn)一步,檢查字符串的長(zhǎng)度是否是四到六位字符長(zhǎng)。用[[:alpha:]]是檢查字符是不是字母的簡(jiǎn)單方式。大括號(hào)內(nèi)的數(shù)字檢查字符個(gè)數(shù)。還要說明的是,^ 和 $ 分別代表字符串的開始和結(jié)束。

if (!ereg("^[[:alpha:]]{4,6}$", $first) !ereg("^[[:alpha:]]{4,6}$", $last)) {

最后,我們來(lái)構(gòu)造一個(gè)常規(guī)表達(dá)式,來(lái)檢驗(yàn)電子郵件地址的有效性。這種檢驗(yàn)方式的效果已經(jīng)引發(fā)了相當(dāng)多的討論。沒有什么東西是十全十美的,不過我下面給出的這段程序還是十分奏效的。

  我這段寶貝程序是從PHP郵件討論組上得來(lái)的。那可是個(gè)好去處 - 常去看看吧。不錯(cuò),這段程序看起來(lái)是有點(diǎn)亂糟糟的。

if (!ereg('^[-!#$%&\'*+\./0-9=?A-Z^_`a-z{ }~]+'.'@'.'[-!#$%&\'*+\/0-9=?A-Z^_`a-z{ }~]+\.'.
'[-!#$%&\'*+\./0-9=?A-Z^_`a-z{ }~]+$', $last)) {


別花太多時(shí)間來(lái)細(xì)究這段代碼了,還是先到下一頁(yè)內(nèi)容吧。

四、 簡(jiǎn)便方法

  前面的常規(guī)表達(dá)式怎么樣?很有意思,是吧?要是在每個(gè)需要檢查電子郵件地址的程序里都寫上這么一段程序,那才真叫有意思呢?!想想看吧,得寫那么亂七八糟的一段程序,還得寫上那么多遍!...不過,當(dāng)然了,還有更簡(jiǎn)便的方法。

  還記得前面我們學(xué)過的頭文件嗎?它能讓我們寫一段程序,象是這個(gè)電子郵件地址的檢查程序,然后把這段程序包含進(jìn)多個(gè)程序里面去。這樣,我們要改寫這段程序時(shí),只須改動(dòng)一處就行了,不用修改多個(gè)文件。

  但是,要做到這一點(diǎn),我們必須用到函數(shù)。

  我們已經(jīng)用過很多次函數(shù)了。每次我們查詢數(shù)據(jù)庫(kù)或檢查字符串長(zhǎng)度時(shí),我們都是用函數(shù)來(lái)做的。這些函數(shù)是PHP自帶的。如果您是位熱心的程序員,您可以用自己編寫的函數(shù)來(lái)擴(kuò)充PHP本身的功能。但對(duì)本教程而言,這部分內(nèi)容是太過高深了一點(diǎn)。我們要?jiǎng)?chuàng)建的函數(shù)不是那一種,而是寫在PHP腳本程序內(nèi)部的函數(shù)。

  函數(shù)就是一段程序代碼,我們可以把一個(gè)或多個(gè)值傳給這段代碼,然后這段代碼會(huì)處理我們傳給它的數(shù)據(jù)并返回一個(gè)值。根據(jù)實(shí)際需要,函數(shù)可以很簡(jiǎn)單,也可以十分復(fù)雜。但是只要我們傳進(jìn)去一個(gè)數(shù),然后能得到一個(gè)數(shù),您管它里面有是復(fù)雜還是簡(jiǎn)單呢!這就是函數(shù)的可愛之處。

  PHP里的函數(shù)與C語(yǔ)言里的函數(shù)表現(xiàn)差不多。當(dāng)我們定義函數(shù)時(shí),必須指明函數(shù)需要接收什么樣的數(shù)據(jù)。一開始好象不太好理解為什么它要接收數(shù)據(jù)進(jìn)去,不過這樣可以防止發(fā)生一些怪異的問題。函數(shù)之所以能做到這一點(diǎn),是因?yàn)楹瘮?shù)里面的變量都是私有變量,也就是說,它只在該函數(shù)內(nèi)部存在。例如,您在程序中有一個(gè)變量叫$myname,如果您創(chuàng)建了一個(gè)函數(shù),想讓這個(gè)函數(shù)也使用那個(gè)$myname變量(值也相同),那是不行的。您可以在函數(shù)內(nèi)部創(chuàng)建一個(gè)變量,名字也叫$myname,這兩個(gè)變量可以各平相處,而各自取不同的值。不過我可不建議您這么做!您如果真的這么做了,等半年后您再來(lái)修改這樣的程序時(shí),您可能就會(huì)被弄糊涂了。

  那我們現(xiàn)在就來(lái)創(chuàng)建一個(gè)函數(shù),先來(lái)個(gè)簡(jiǎn)單的。我們要給它取個(gè)名字,指定它要接收什么的變量。在調(diào)用這個(gè)函數(shù)之前,我們還得定義這個(gè)函數(shù)。  

<html>
<body>
<?php
function addnum($first, $second) {
$newnum = $first + $second;
return $newnum;
}
echo addnum(4,5);
?>
</body>
</html>


這就行了!首先,我們創(chuàng)建了第一個(gè)自己的函數(shù)。我們定義了兩個(gè)新變量,$first和$second,注意它們是怎樣被定義的。在調(diào)用這個(gè)函數(shù)時(shí),要給這兩個(gè)變量按它們出現(xiàn)的順序賦好值 - 4賦給$first,5賦給$second。然后我們簡(jiǎn)單地把這兩個(gè)數(shù)加在一起,返回結(jié)果!胺祷亍痹谶@里的意思是把結(jié)果送回去。在程序最后部分我們把數(shù)字9顯示出來(lái)。

  我們?cè)賮?lái)創(chuàng)建一個(gè)函數(shù),讓它對(duì)我們的數(shù)據(jù)庫(kù)應(yīng)用有點(diǎn)幫助。一個(gè)能妥善處理錯(cuò)誤的函數(shù)怎么樣?試試下面的程序:

<html>
<body>
<?php
function do_error($error) {
echo "噢,好象有點(diǎn)兒?jiǎn)栴}...<br>";
echo "系統(tǒng)報(bào)告的錯(cuò)誤是:$error.\n<br>";
echo "最好是暫時(shí)關(guān)閉網(wǎng)站并通知系統(tǒng)管理員。";
die;
}
if (!$db = @mysql_connect("localhost","user", "password")) {
$db_error = "無(wú)法連接到MySQL數(shù)據(jù)庫(kù)";
do_error($db_error);
}
?>
</body>
</html>


  在運(yùn)行程序之前,試試關(guān)閉MySQL數(shù)據(jù)庫(kù),或使用錯(cuò)誤的用戶名或口令。您會(huì)看到友好的、有用的錯(cuò)誤信息 。細(xì)心的朋友會(huì)注意到在mysql_connect()函數(shù)之前的那個(gè)@符號(hào)。它會(huì)抑制系統(tǒng)錯(cuò)誤信息,使得程序只能從do_error()函數(shù)那里得到有關(guān)的錯(cuò)誤信息。您還會(huì)注意到,我們可以把一個(gè)在別處定義的變量作為參數(shù)傳給函數(shù),而不是在調(diào)用時(shí)直接賦一個(gè)值。

  還記得我過函數(shù)使用的是私有變量吧?這話說得不完全對(duì)。事實(shí)上,您可以讓函數(shù)訪問到函數(shù)外面的變量。您可能要寫一個(gè)函數(shù),用它來(lái)查詢數(shù)據(jù)庫(kù),然后把結(jié)果顯示在多個(gè)網(wǎng)頁(yè)中。您不想每次都把數(shù)據(jù)庫(kù)連接標(biāo)識(shí)都傳給函數(shù)。在這種情況下,您可以把連接標(biāo)識(shí)定義成一個(gè)全局的變量。例如:

<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>

 
 這是個(gè)很簡(jiǎn)單的函數(shù),但重要的是,您在調(diào)用這個(gè)函數(shù)時(shí),不必傳遞$db變量 - 您可以通過 global這個(gè)字使得函數(shù)可以訪問到該變量。在這條語(yǔ)句中您可以定義多個(gè)全局變量,各個(gè)全局變量之間用逗號(hào)隔開。

  最后,您可以使用可選參數(shù),這樣看起來(lái)您已經(jīng)是真正的專家了。這里面關(guān)鍵的一點(diǎn)是,在函數(shù)中定義參數(shù)時(shí)要給它指定一個(gè)缺省值。然后您在調(diào)用這個(gè)函數(shù)時(shí),如果不為該參數(shù)變量指定其他值,那么函數(shù)會(huì)自動(dòng)把缺省值賦給這個(gè)變量。如果您指定了其他值,那么缺省值就不起作用了。

  不太明白?比方說,您在連接數(shù)據(jù)庫(kù)時(shí),幾乎總是連接到相同的服務(wù)器,并且使用相同的用戶名和口令。不過有時(shí)候,您也需要連接到其他的服務(wù)器?纯聪旅娴某绦颍

<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>


  很“酷”是不是?在定義函數(shù)時(shí),函數(shù)內(nèi)部用到的變量也定義好了。第一次調(diào)用這個(gè)函數(shù)時(shí),全部參數(shù)變量都是用的缺省值。第二次調(diào)用時(shí),服務(wù)器名變了,而用戶名和口令沒有變。真是太棒了!

  想想您在什么地方還能用到函數(shù)。您可以用函數(shù)來(lái)作數(shù)據(jù)校驗(yàn),來(lái)完成常用的功能,等等。在對(duì)Web網(wǎng)頁(yè)上顯示的文字作處理時(shí),我用到了很多函數(shù)。我可以一次完成對(duì)文字的檢查、解析和修改,來(lái)加入換行符和HTML標(biāo)記等。

  現(xiàn)在,剩下的就是我要給您的一些忠告了。

五、進(jìn)階技巧

  談起數(shù)據(jù)庫(kù)開發(fā),我們有很多東西要學(xué)。如果您還沒有學(xué)習(xí)過怎樣進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì),和怎樣在不同的平臺(tái)上可靠地運(yùn)行數(shù)據(jù)庫(kù),那么請(qǐng)您趕快去找本這方面的好書來(lái)讀一讀。這方面的能力會(huì)帶給您無(wú)法估量的好處,從長(zhǎng)遠(yuǎn)的眼光看,它會(huì)為您節(jié)省大量的時(shí)間與精力。還有,認(rèn)真學(xué)學(xué)MySQL。這是一個(gè)復(fù)雜而有趣的數(shù)據(jù)庫(kù),有很多不錯(cuò)的文檔。學(xué)學(xué)數(shù)據(jù)庫(kù)的表結(jié)構(gòu)、數(shù)據(jù)類型,還有SQL。如果您真正掌握了SQL,您可以完成相當(dāng)多的實(shí)際工作。

  最后,還有PHP。您想要的一切幾乎都可以在PHP的網(wǎng)站上找到,包括全面的文檔、郵件討論組的討論內(nèi)容、程序代碼庫(kù),等等。學(xué)習(xí)PHP的一個(gè)絕好的辦法是研究用戶手冊(cè)中給出的實(shí)例,并查閱網(wǎng)上的代碼。網(wǎng)友們發(fā)表的代碼包括許多函數(shù)和類,您可以在自己的程序中直接使用,而不必自己從頭來(lái)過。另外,如果您遇到問題,郵件討論組是一個(gè)非常值得利用的資源。PHP的開發(fā)人員自己也會(huì)參加郵件討論組,還有許多經(jīng)驗(yàn)豐富的高手們,他們都可以幫助您解決問題。