PHP常用函數手冊

PHP常用函數手冊

PHP常用函數手冊判斷一個編程語言的功能強弱,可以從他的庫函數入手。一個較好的編程語言,必然有較強的庫函數。

I/O函數

Flush


函數描述:flush();
說明:函數Flush刷新PHP的輸出緩存,它儘量將緩和存中的內容輸出到用戶的瀏覽器。

返回值:無

Print


函數描述:print(string arg,string[arg],…);
說明:函數print輸入所有的參數。

返回值:若輸出成功,返回true(1);否則返回false(0)

Printf


函數描述:printf(string format,mixed[string]);
說明:函數printf根據所給格式format,輸出string。格式以一個%開頭,以一個字母結尾,該字母決定輸出的數據類型。PHP的類型說明符如表所示。

PHP
的類型說明符
類型說明符            
b   
輸出二進制整數
o   
輸出八進制整數
x,X   
輸出十六進制整數,“x”使用小寫字母,“X”使用大寫字母
d   
輸出十進制整數
c   
輸出由整數ASCII代碼說明的字符
s   
輸出字符串
f   
輸出浮點數
e   
輸出用科學計數法表示的浮點數
%   
輸出一個百分號
返回值:無

正規表達式函數

Ereg


函數描述:int ereg string pattern string string array[regs]);
說明:函數ereg在參數string中尋找pattern中給出的正規表達式相匹配的項。如果提供了可選reg數組,則每一項匹配將順序存儲在數組regs[1]開始的各項中。在regs[0]中存儲整個正規表達式的匹配項。在函數ereg中,匹配的辨別是區分大小寫的。請參看以下程序
返回值:若至少有一處匹配則函數ereg返回true1);否則返回false0)。
例子:
<

$date=”2000-5-4”;
if (ereg(“([0-9]){4})-([0-9]{1,2}-([0-9]){1,2})”,$date,$regs))
{
print(“$regs[3].$regs[2].$regs[1]”);
}
else
{
print(“
輸出時間格式有誤:$date”);
}
?>
該程序輸出結果:14.5.2000

Ereg_replace


函數描述:string Ereg_replace(string pattern,string replacement,string string);
說明:函數Ereg_replace可用於替換文本,當參數pattern與參數string中的字串匹配時,他就被參數replacement的內容所替換。若參數pattern中包含有圓括號的子表達式,則在參數replacement中可以用包含特定的代碼來說明哪個子表達式被替換,最多可以有九個子表達式。其具體形式是用兩個反斜槓後跟一個從0~9的單數字,0表示與整個表達式相匹配,1~9表示相應的與前1~9個子表達式相匹配。注意,參數pattern中的圓括號是可以嵌套的,其表達式序號等於該表達式前的圓括號的數目。

返回值:函數ereg_eplace返回替換後的字符串pattern

Eregi


函數描述:int eregi(string pattern , string string , array[regs]);
說明:函數eregiereg相類似,不同之處是函數eregi進行匹配時不區分大小寫。

返回值:若至少有一處相匹配,函數eregi返回true(1),否則返回false(0)

Eregi_replace


函數描述:string Eregi_replace(string pattern,string replacement,string string);
說明:函數eregi_replaceereg_replace相類似,不同之處就是函數eregi_replace進行匹配時不區分大小寫。

返回值:函數eregi_eplace返回替換後的字符串pattern

Split


函數描述:array split(string pattern,string string , int[limit]);
說明:函數split以參數pattern作爲分界符從參數string 中取行一系列子串,並將它們存入一字符串數組。參數limit限定生成數組的大小,數組中的最後一個元素爲參數string中還未分組的所有內容。

返回值:函數split返回生成的字符串數組,如果有一個錯誤,返回false(0)

Sql_regcase


函數描述:string sql_regcase(string string);
說明:函數sql_regcase生成一個字符串數組,數組中的各個元素依次爲參數string中各個字符的大小寫;若在參數string中有一個空格,其對應數組元素的內容爲一個空格。

返回值:函數sql_regcase返回所生成字符串數組。
例:
<?
print(sql_regcase(“Hello PHP”));
?>
此程序結果爲:[Hh][Ee][Ll][Ll][Oo][ ][Pp][Hh][Pp]

數學函數

Abs


函數描述:mixed abs(mixed number);
返回值:函數abs返回參數number的絕對值。

Acos


函數描述:double acos(double number);
返回值:函數acos返回參數number的反餘弦值。如果參數number大於1或小於1,則其反餘弦值無意義。

Asin


函數描述;double asin(double number);
返回值:函數asin返回參數number的反正弦值。如果參數number大於1或小於1,則其反正弦值無意義。

Atan


函數描述:double atan(double number);
函數atan返回參數number的反正切值。

Atan2


函數描述:Double atan2(double x , double y);
返回值:函數atan2返回由直角座標系指定的座標點在極座標系中的角度的弧度值。

BinDec


函數描述:int bindec(string binary_number);
返回值:函數bindec返回一個用二進制數寫成的字符串binary_number的整數值。PHP使用32位帶符號的整數,其二進制數的第一位是符號位。

Ceil


函數描述:int ceil(double number);
返回值:函數ceil返回大於參數number 的最小整數;若number爲整數。,則返回其本身。

Cos


函數描述:double cos(double angle);
返回值:函數cos返回以弧度的大小爲參數angle的角的餘弦值。

DecBin


bindec相反,將十進制轉爲二進制。

DecHex<->HexDec


返回十六進制值

DecOct<->OctDec


返回八進制值

Deg2rad<->Rad2reg


函數描述:double deg2red(double angle);
返回值:函數deg2red返回角度數angle相對應的弧度值。

Exp


函數描述:double exp(double power);
返回值:函數exp返回自然對數的power次冪。

Floor


函數描述:int floor(double number);
返回值:返回參數number的整數部分。

Getrandmax


函數描述:int getrandmax();
返回值;返回由函數rand所能返回的最大值

LogLog10


函數描述:Double log(double number);
返回值:返回參數number的自然對數(返回以10爲底的對數)

Max (<->Min)


函數描述:mixed max(mixed arg1, mixed arg2, …,mixed argn);
返回值:返回此數組中的最大值(最小值),若參數中有浮點數,則所有參數轉化成浮點數,返回值也爲浮點數;否則所有參數轉化成整數,返回值爲整數。

pi


函數描述:double pi();
返回值:函數pi返回圓周率的近似值。

Pow


函數描述:double powdouble basedouble power);
返回值:函數pow返回參數basepower次冪。

Rand


函數描述:int randint lowestint longest);
說明:函數rand使用前要用srand激活。
返回值:函數rand返回可選參數lowestlongest之間的一個數(包含兩個參數);若無參數,則返回值的範圍從零到getrandmax返回的整數。

Round


函數描述:double rounddouble number);
返回值:函數round返回最接近參數number的整數。

Sin


函數描述:double sindouble angle);
返回值:函數sin返回一個用弧度表示的角的正弦值。

Sqrt


函數描述:double sqrtdouble number);
說明:在函數sqrt中,參數number不能小於0
返回值:函數sqrt返回參數number的平方根。

Srand

 

函數描述:srandint seed);
說明:函數srand激活隨機數發生器。參數seed是隨機產生的種子,即所得的隨機數是由參數經過一系列計算所的。
返回值:無。

Tan


函數描述:double tanduoble angle);
返回值:函數tan返回以弧度表示的角的正切值。

時間函數

CheckDate


函數描述:int checkdateint monthint dateint year);
說明:在PHP中諤諤所謂合法日期,指的是參數year介於1900~32767之間,month介於1~12之間,day處於當前月的有效日期之間的日期。
返回值:若輸入的日期合法,返回true1);否則返回false0)。

Date


函數描述:string date(string format, int [timestamp]);
說明:函數date根據參數format生成一個描述日期timestamp的字符串。參數timestamp可選,若給定,則爲所需的時間戳,即從197011開始的秒數;若爲空白,則使用當前日期。Format代碼如下表:

返回值:函數date返回生成的日期描述字符串。
函數dateformat代碼表
             
a   am/pm
A   AM/PM
d   
有前導零的月份中的日期
D   
三字母簡寫形式的星期幾
F   
月份名
h   
1~12表示的小時
H   
0~23表示的小時
I   
分鐘
j   
沒有前導零的月份中的日期
l   
星期幾
m   
1~12表示的月份
M   
簡寫月份名
S   
月份中日期的正序後綴
U   
從紀元開始的秒數
y   
兩位的年份
Y   
四位的年份
Z   
一年之中的日期

Getdate


函數描述:array getdateint[timnestamp]);
說明:函數生成一個帶有所給日期信息的關聯數組。參數timestamp爲所需的時間戳,若爲空,則使用當前日期。關聯數組元素如下表所示:
返回值:函數getdate返回生成的關聯數組。
函數getdate生成的關聯數組元素表
             
hours   24
小時格式的小時
mday   
月份中的日期
minutes   
分鐘
mon   
數字形式的月份
month   
月份的全稱
seconds   
秒數
wday   
0~6數字形式的星期幾
weekday   
星期幾的名稱
yday   
一年中數字形式的日期
year   
年份
0   
日期戳

MkTime


函數描述:int mktime(int hour, int minute, int second, int month, int day, int year);
返回值:函數mktime返回給出日期的時間戳,即從197011開始的秒數。所有參數都可選,若爲空,則使用當前值。若某參數超過範圍,函數mktime也可以正確解釋。例如,用13作爲月份就等於第二年的一月份。

GmmkTime


函數描述:int gmmktime(int hour, int minute, int second, int month, int day, int year);
返回值:函數gmmktime與函數mktime相類似,但不同的是他的各參數均被認爲是格林威治時間。

Time


函數描述:int time();
返回值:函數time返回當前的時間戳。

MicroTime


函數描述:string microtime();
返回值:函數microtime返回一個字符串,其組成爲兩個由空格隔開的成員,第一個成員是系統時間的毫秒數,第二個成員是從197011開始計的秒數,即系統時間的時間戳。

字符串操作函數

AddSlashes


函數描述:string addslashesstring string);
說明:函數addslashes在參數string中的單引號(‘)、雙引號()、反斜槓(/)和空格前添加反斜槓(/)。
返回值:函數addslashes返回添加後的字符串參數string

Chop


函數描述:string chopstring string);
返回值:函數chop去除參數string中最後一個非空字符後的所有空格,並返回生成的新字符串。

Chr


函數描述:string chrint ascii);
返回值:函數chr根據所給的ASCII碼返回相對應的字符。

Eval


函數描述:evalstring phpcode);
說明:函數eval將參數phpcode作爲PHP腳本中的一行代碼執行,括號內應用單引號或退格美元符。
返回值:無。

Explode


函數描述:array explodestring separatorstring string);
返回值:函數explode返回一個字符串數組,數組元素是由參數separator分隔的參數string的各段內容。

Htmlspecialchars


函數描述:string htmlspecialcharsstring string);
說明:在HTML中,某些字符與特殊意義,爲保留其原意,則將他們用HTLM語言描述。
‘&’
轉換爲“&”
‘ ” ’
轉換爲
‘&qout’
‘<’
轉換爲
’ < ’
‘>’
轉換爲
‘>’
返回值:函數htmlspecialchars返回轉變後的字符串。

Implode


函數描述:string implodearray pieces string glue);
返回值:將數組pieces依次用參數glue聯結並返回生成的字符串

Jion

函數描述:string joinarray pieces string glue);
說明:函數jion與函數implode作用完全相同。

Ltrim


函數描述:string ltrimstring string);
返回值:去除參數string中第一個非空字符前的所有空格,並返回生成的新字符串。

Nl2br


函數描述:string nl2br(string string);
返回值:在所有的新行前插入“<br>”,並生成新的字符串。

Ord


函數描述:int ordstring string);
返回值:返回所有字符的ASCII碼。

QuoteMeta


函數描述:string quotemetastring string);
返回值:此函數返回一個字符串,該字符串在參數string中的下列元素前加反斜槓:“.”“+”“//”“*”“?”“[”“]”“^”“(”“)”“$”

RawurldeCode


函數描述:string rawurldecodestring string);
返回值:將原參數字符串string中的百分號(%)及其後的兩位十六進制數替換成對應的文本字符,並返回替換後的字符串。

Sprintf


函數描述:string sprintfstring formatmixed[string]);
返回值:與函數printf作用類似,不同之處是他不將原需輸出的字符串發送給瀏覽器,而是返回該字符串。

Strchr


函數描述:string strchrstring string string needle);
說明:與函數strstr的作用相同。

Strcmp


函數描述:int strcmp(string str1,string str2);
說明:函數strcmp比較參數Str1str2的大小,比較過程區分大小寫。

返回值:如果str1大於str2,則函數strcmp返回1;如果str1小於str2,則返回-1;如果兩者相等,則返回0

Strcspn


函數描述:int strcspn(string str1 ,string str2);
返回值:從參數str1的首字符開始,不包括參數str 2中任意一個字符的最短字符串的長度。

(即str2str1中的位置,返回的位置從0開始。)

StripSlashes


函數描述:string stripslashes(string string);
說明:刪除參數string中的反斜槓字符。

返回值:返回經過上述操作的字符串。

Strlen


函數描述:int strlen(string string);
返回值:返回參數字符串string的長度。

Strpos

函數描述:int stropsstring string string needle);
說明:函數strpos中參數needle以整個字符串起作用。若參數needle爲一個數字,則函數自動將其轉化成整數並作爲相對應的ASCII碼使用。
返回值:函數strpos返回參數needle在字符串參數string中的最先位置,位置數從0開始。若在字符串string中不包含needle,則返回false0)。

Strrpos

函數描述:int strrposstring string string needle);
說明:與函數strpos不同,函數strrpos中,參數needle中起作用的只是其首字符。若參數needle爲一個數字,則函數自動將其轉化成整數並作爲相對應的ASCII碼使用。
返回值:函數strrpos返回參數needle在字符串參數string中的最後位置,位置數從0開始。若在字符串string中不包含needle,則返回false0)。

Strrchr

函數描述:string strrchrstring string string needle);
說明:在函數strrchr中,參數needle中起作用的只是其首字符。若參數needle爲一個數字,則函數自動將其轉化成整數並作爲相對應的ASCII碼使用。
返回值:函數strrchr返回string中由最後一個needle字符開始及其之後的所有部分。若在字符串string中不包含needle,則返回false0)。

Strrev

函數描述:string strrevstring string);
返回值:函數strrev將參數string倒置並返回。

StrStr

函數描述:string strstrstring string string needle);
說明:若參數needle爲一個數字,則函數自動將其轉化成整數並作爲相對應的ASCII碼使用。
返回值:函數strstr返回參數string中從參數needle開始及其之後的部分,包括參數needle

Strtok

函數描述:string strtok(string str1,string str2);
返回值:返回參數str1中在參數str2首字母前的字符串。

Strtolower
<-> Strtoupper
函數描述:string strtolowerstring string);
說明:jiang參數string中的大寫字母替換成小寫字母。
返回值:替換後的字符串。

Strtr


函數描述:string strtr(string string ,string from ,string to);
說明:函數strtr將參數string中字符from替換成字符to,若參數from和參數to的長度不同,則較長字符串中超過較短字符串長度的部分將被丟棄。

返回值:返回替換後的字符串。

Substr

函數描述:string substrstring stringint startint [length]);
說明:函數substr從參數string中的第start個字符開始,提取出一個長度爲length的字符串。如果參數start是正數,則返回字符串將從參數string首部起第start個字符開始;若爲負數,則返回字符串將從參數string尾部逆推的第start個字符開始。如果參數給出併爲正,,則返回的是一個從start開始的長度爲length的字符串;如果參數length給出且爲負,則返回的字符串以正數第start位字符爲首,以從參數string尾部開始逆推(-length)個字符爲結束的字符串;若返回的字符串長度爲負,則返回值爲NULL
返回值:返回所提取出的字符串。

Trim

函數描述:string trimstring string);
說明:函數trim的作用等同於函數chopltrim共同對參數隨同日內閣進行操作。
返回值:函數trim去除參數string首尾空格並返回新生成的字符串

文件操作函數

Basename

函數描述:string basenamestring path);
返回值:返回路徑path底端的文件名。

Chdir

函數描述:int chdirstring directory);
說明:函數chdir改變PHP腳本的默認路徑。
返回值:如果改變成功,返回true1),否則返回false0)。

Chgrp

函數描述:int chgrpstring filename string group);
說明:在UNIX中函數chgrp改變一個文件所在的組,但在Windows下該函數返回true1)而無任何作用。
返回值:如果改變成功,返回true1);否則返回false0)。

Chmod

函數描述:int chmodstring filenameint mode);
說明:函數根參數mode給出的文件模式,對給出的文件設置UNIX權限。文件模式如下表:
返回值:如改變成功,返回true1);否則返回發false0)。
文件模式表
                 
0   
文件不許訪問
1   
文件可執行
2   
文件可寫
4   
文件可讀

Chown

函數描述:int chownstring string user);
說明:此函數改變文件所有者的名字。
返回值:如果改變成功,返回true1);否則,返回false0)。

Closedir

函數描述:int closedirint directory_handle);
說明:在一個路徑被函數opendir打開後,用此函數關閉該路徑。
返回值:如果關閉成功,返回true1);否則,返回false0)。

Copy

函數描述:int copystring oldfilename string newfilename);
說明:copy把由原參數oldfilename說明的文件複製到由目的參數newfilename說明的文件中。
返回值:如果複製成功,返回true1);否則,返回false0)。

Dir

函數描述:obj dirstring directory);
返回值:函數返回一個目錄對象,該對象有兩個屬性:句柄和路徑。句柄可被其他目錄函數使用,路徑是用來生成目錄對象的字符串。如果出錯,則返回false0)。

Fclose

函數描述:int fclose(int file_handle);
說明:此函數關閉一個已打開的文件。參數file_handle爲一個文件被打開時產生的句柄。

返回值:如果關閉成功,返回true1);否則,返回false0)。

Feof


函數描述:int feofint file_handle;
說明:在讀取文件時,PHP始終保持一個指向該文件末尾的指針。函數feof用以確定讀取指針是否已到達文件末尾。

返回值:若文件讀取指針達到文件末尾,函數feof返回ture1);否則返回false0)。

Fgetc

函數描述:string fgetcint file_handle);
說明:參數file_handle是一個文件被打開時產生的句柄。
返回值:函數fgetc從一個已經對打開的文件中讀取一個單個字符。如出錯,則返回false0)。

Fgets

函數描述:string fgetsint file_handle, int length);
返回值:返回從文件中讀取的字符串,文件由文件句柄file_handle指定,讀取長度將根據length-1儘可能的讀取字符,支行結束或文章末尾。若出錯,則返回false0)。

Fgetss

函數描述:string fgetssint file_handleint length);
返回值:與fgets相類似,只是在返回字符串時,試着剝去HTMLPHP代碼。

File

函數描述:array filestring filename);
返回值:函數返回一個數組,數組的元素一次是文件的每一行,數組下標從開始。若出錯,則返回false(0).

File_exists

函數描述:int file_exists(string filename);
說明:此函數用來確定文件是否存在。

返回值:若存在,返回true1);否則返回false0)。

Fileatime

函數描述:int fileatimestring filename);
返回值:以標準時間戳的格式,即從197111以秒計,返回最近改變文件的時間。在Windows下返回文件的生成時間。

Filectime

函數描述:int filectimestring filename);
返回值:在UNIX下,函數filectime返回以標準時間戳的格式,即從197111以秒計,返回最近改變文件的時間。在Windows下返回文件的生成時間。

Filegroup

函數描述:int filegroupstring filename);
返回值:在UNIX下,返回所給文件的組標誌符,若出錯則返回false0)。在windows下總返回false0)。

Fileinode

函數描述:int fileinodestring filename);
返回值:在UNIX下,返回所給文件的inode,若出錯則返回false0)。在windows下總返回false0)。

Filemtime

函數描述:int filemtimestring filename);
返回值:函數filemtime返回以標準時間戳的格式,即從197111以秒計,返回最近改變文件的時間。該函數在UNIXWindows下運行的結果一樣。

Fileowner

函數描述:int fileownerstring filename);
返回值:在UNIX下,函數返回文件所有者的用戶標識符,若出錯則返回false0)。在windows下總返回false0)。

Fileperms

函數描述:int filepermsstring filename);
返回值:返回文件的許可權,若出錯則返回false0)。

Filesize

函數描述:int filesizestring filename);
返回值:返回所給文件打消的字節數。

Filetype

函數描述:int filetypestring filename);
返回值:函數filetype返回所給文件的類型作爲描述的字符串,可能值爲block,char,dir,fifo,file,linkunknown

Fopen

函數描述:int fopenstring filenamestring mode);
說明:函數fopen根據參數filenamemode打開一個文件以便讀寫。若參數filename“http://”“ftp://”開始,則文件通過Internethttpftp協議打開;否則文件在本地系統內打開。
若模式帶有“+”號,則爲更新模式,它允許同時讀和寫;若字母“b”出現在模式的最後部分,則該文件被認爲是二進制文件。(文件打開模式參見下表)
文件打開模式表
               
r   
以只讀模式打開一個文件,並將文件內部指針指向文件開頭
r+   
以可讀可寫模式打開一個文件,並將文件內部指針指向文件開頭
w   
以只寫模式打開一個文件,並將原文件內容清空,並將文件內部指針指向文件開頭;若指定文件不存在,則創建一個名爲filename的新文件。
w+   
以可讀可寫模式打開一個文件,並將原文件內容清空,並將文件內部指針指向文件開頭;若指定文件不存在,則創建一個名爲filename的新文件。
a   
以只寫模式打開一個文件,並將文件內部指針指向文件末尾;若指定文件不存在,則創建一個名爲filename的新文件。
a+   
以可讀可寫模式打開一個文件,並將文件內部指針指向文件末尾;若指定文件不存在,則創建一個名爲filename的新文件。

Fpassthru


函數描述:int fpassthru(int file_handle);
返回值:函數fpassthru向瀏覽器輸出文件,完成後將文件關閉。若出錯則返回發false0)。

 Fputs

函數描述:int fputsint file_handle,string output;
說明:函數fputs將數據寫入一個打開的文件。

返回值:如果寫入成功,返回true(1);否則返回false0)。

Fread

函數描述:string freadint file_handle,string length;
返回值:函數fread返回從指定文件中讀取的字符串,當字符串長度等於參數length或文件結束時,讀取結束。若讀取失敗,則返回false0)。

Fseek

函數描述:int fseekint file_handle,int offset;
說明:函數fseek修改PHP中一個已打開文件的內部指針,其偏移量即距離文件頭的字節數等於參數offset

返回值:若修改成功,函數fseek返回0;否則返回-1。這需要讀者注意。

Ftell

函數描述:int ftellint file_handle;
返回值:函數ftell返回PHP文件內部指針的偏移量。

Fwrite

函數描述:int fwriteint file_handle, string string, int [length];
說明:函數fwrite將字符串string寫入由文件句柄file_handle指定的文件。若可選參數length給出,則當字符串string結束或寫入長度達length時寫入結束。

返回值:若寫入成功,返回true(1);否則返回false0)。
提示:以字符“gz”開始的庫函數,用於對壓縮文件的操作。

Gzclose

函數描述:int gzclose(int file_handle);
說明:關閉由gzopen打開的文件。

返回值:若關閉成功返回true1);否則返回false0)。
GzofGzfileGzgetcGzgetsGzgetssGzopenGzpassthruGzputsGzrewindGzseekGztell)與前面的文件操作函數類似。

Is_dir

函數描述:int is_dir(string filename);
返回值:若給出的參數filename是一個目錄,則函數is_dir返回true1);否則返回false0)。

Is_executable

函數描述:int is_executablestring filename);
返回值:如果文件存在且可執行,返回true1);否則返回false0)。

Is_file

函數描述:int is_file(string filename);
返回值:如果參數filename]所指的文件存在且是一個正常的文件,則函數is_file返回true1);否則返回false0)。

Is_link

函數描述:int is_link(string dilename);
返回值:如果參數filename是符號連接,則函數is_link返回true1);否則返回false0)。

Is_readable

函數描述:int is_readable(string filename);
返回值:如果文件存在且可讀,則函數is_readable返回true(1);否則返回false0)。在UNIX中,取決於文件的許可權,在Windows中函數的返回值總爲true

Is_writeable

函數描述:int is_writeable(string filename);
返回值:如果文件存在且可寫,則函數is_writeable返回true1);否則返回false0)。

Link

函數描述:int link(string source,string destination);
說明:函數link生成一個硬鏈接。在Windows中,該函數不起任何作用,也不返回任何值。

Mkdir

函數描述:int mkdirstring directoryint mode);
說明:函數mkdir用所給的名字創建一個新的目錄,許可權根據模式參數進行設置。
返回值:目錄創建成功,返回true(1);否則返回false0)。

Opendir

函數描述:int opendirstring directory);
返回值:函數opendir根據所給目錄名directory返回一個目錄句柄。

Pclose

函數描述:int pcloseint file_handle);
說明:關閉由popen函數打開的文件流。

Popen

函數描述:int popenstring commandstring mode);
說明:函數popen打開一個通向正在執行的命令的管道,該管道可讀可寫。
返回值:函數popen返回一個文件句柄。

Readdir

函數描述:string readdirint directory_handle);
返回值:函數readdir返回由目錄句柄directory_handle指定目錄中的下一個文件的文件名。

Readfile

函數描述:int readfilestring filename);
說明:用函數readfile讀取所給的文件並直接發送給瀏覽器。若參數filename是以http://ftp://開頭的,則相應地用httpftp協議讀取文件。

Readgzfile

readfile類似,只是他作用於壓縮文件。

Readlink

函數描述:string readlinkstring filename);
返回值:函數readlink返回一個符號鏈接所指的路徑;若出錯,則返回false0)。

Rename

函數描述:int renamestring old_name,string new_name);
說明:函數rename將參數old_name指定的文件名改變爲由參數new_name指定的文件名。
返回值:若改變成功,返回true1);否則返回false0)。

Rewind

函數描述:int rewindint file_handle;
說明:函數rewindPHP的內部文件指針移到文件頭。

Rewinddir

函數描述:int rewinddirint directory_handle;
說明:函數rewinddirPHP的內部指針重置到一目錄列表的開頭。

返回值:若重置成功,則函數rewinddir返回true1);否則返回false0)。

Rmdir

函數描述:int rmdirstring directory);
說明:利用函數rmdir可以刪除一個目錄。
返回值:若刪除成功,則函數rmdir返回true1);否則返回false0)。

Stat

函數描述:array statstring filename);
說明:函數stat執行C語言中的stat函數並返回一個由13個元素的數組。元素如表所示:
返回值:函數stat返回生成的數組。
函數stat的返回數組元素表
               
0   
文件所在設備或驅動器字母
1   
索引節點
2   
文件模式
3   
鏈接數
4   
用戶
5   
文件所在組
6   
設備類型或驅動器字母
7   
文件大小
8   
文件的最後訪問時間
9   
文件的最後修改時間
10   
文件的最後改變或生成時間
11   
塊大小
12   
塊數目

Symlink

函數描述:int symlinkstring sourcestring destination;
說明:函數symlink用目的參數中的名字創建一個符號鏈接到源參數。

返回值:若創建成功,返回true(1);否則返回false0)。

Touch

函數描述:int touchstring filenamestring [time]);
說明:函數將文件的最近修改時間設置爲給出的時間timetime爲從197011的秒數。若time默認,則使用當前時間。

Umask

函數描述:int umaskint [umask]);
說明:函數返回文件創建時賦予的默認的許可權。
返回值:若給出了可選參數umask,則函數返回參數umask0777的邏輯與。在Windows下,該函數不起任何作用,且返回false0)。

Unlink

函數描述:int unlinkstring filename);
說明:函數unlink永久刪除一個文件。
返回值:若刪除成功,則函數unlink返回true1);否則返回false0)。

其他函數

Include

函數描述:include string filename);
說明:函數include使PHP編譯器打開並執行所給的文件。該文件被看作普通的PHP腳本。也可以通過URLhttp://ftp://開頭來指明文件。
返回值:無。

Require

函數描述:require string filename);
說明:函數require使PHP編譯器打開並執行所給的文件。該文件被看作普通的PHP腳本。也可以通過URLhttp://ftp://開頭來指明文件。
返回值:無。
從表面上看,函數includerequire的作用是相同的,我們可以用它們將一些包含已編寫代碼的文件引入到PHP程序中。在這些文件中,主要存儲需要重複使用的常量、變量聲明和一些函數的聲明和定義。函數includerequire的使用,可以使複雜的PHP程序變得簡潔明瞭。
但在實際執行過程中,這兩個函數有着很大的差別。函數require通常放在PHP程序的最前面,PHP程序開始執行,就會先讀入require所指定的文件,將它變成PHP程序的一部分。常用的自定義函數可以通過這種方法引入PHP程序。而函數include通常放在PHP程序的循環結構中,每次程序運行include語句,就將include所指定的文件引入PHP程序執行一遍。

Header

函數描述:int header(string http_header);
說明:函數hader發送一個http頭標給瀏覽器,需要注意的是,函數必須將任何輸出發送給瀏覽器之前調用。

返回值:如果發送成功,函數header返回true1);否則返回false0)。

Getenv

函數描述:string getenv(string variable);
返回值:函數getenv返回所給出的環境變量值;若出錯,則返回false0)。

Putenv

函數描述:putenvstring variable);
說明:函數putenv設置一個環境變量的值。

Getallheaders

函數描述:array getallheader();
返回值:函數getallheader返回在服務器和瀏覽器之間交換的所有頭,其中有些將被轉換爲環境變量。

Setcookie

函數描述:int setcookiestring name,string value,int expire ,string path,string domain,int secure;
返回值:如果設置成功,返回true1);否則返回false0)。

Gethostbyaddr

函數描述:string gethostbyaddrstring ip_address;
返回值:函數gethostbyaddr返回由IP地址指定的主機名。

Gethostbyname

函數描述:string gethostbynamestring hostname);
返回值:函數gethostbyname返回由主機名hostname指定的主機的IP地址。

Gethostbynamel

函數描述:array Gethostbynamelstring hostname);
返回值:函數Gethostbynamel返回由主機名hostname指定的主機的IP地址列表。

PHP中的環境變量

              

AUTH_TYPE  

 該變量提供用來訪問腳本使用的認證協議(需本地服務器支持)

GETEWAY_INTERFACE  

 本地服務器支持的CGI版本

HTTP_USER_AGENT 

  用戶瀏覽器的類型和版本

HTTP_FROM  

 用戶的E-mail地址(在給HTML表單提供了默認值的情況下才能使用)

PATH_INFO   

調用腳本的HTML請求的路徑信息

REMOTE_ADDR  

 用戶的IP地址

REMOTE_HOST  

 用戶所使用的計算機的域名

SCRIPT_NAME 

  腳本的路徑名

SERVER_NAME 

  服務器的主機名

SERVER_PORT  

 本地web服務器監聽的端口號

SERVER_PROTOCOL  

 服務器使用的網絡協議的版本

SERVER_SOFTWARE  

 Web服務器的名稱和版本

PHP數據庫函數(基於MySQL)

PHP關於MySQL數據庫的函數有幾十個,這裏只介紹常用的一些,目的是能夠快速上手。如果實踐中需要更多的庫函數,可以翻閱PHP函數手冊。

Mysql_connect

函數描述:int mysql_connect(string [hostname] ,string [username] , string [password]);
說明:mysql_connect是最常用一個函數,它用來建立和指定主機上的Mysql數據庫的連接。三個參數均是可選選取項,默認值分別是:localhost、服務器進程的所有者及空串。其中,hostname可包含端口號,可寫爲:hostname:port

在該PHP腳本運行結束時,連接被自動關閉,當然也可經用mysql_close來提前結束該連接。如果想建成立永久性連接,可使用函數mysql_pconnect。除了這一點外,這個函數是和mysql_connect完全相同。
返回值:連接成功後會返回一個MySQL連接標識符,失敗時返回 false

mysql_select_db

函數描述: int mysql_select_db(string database_name , int [link_identifier]);
說明:mysql_select_db用來根據連接標識符在該數據庫服務器上選取數據庫作爲當前的數據庫。如果不特別聲明連接標識符,則默認爲是上一次打開的連接。該函數使用前必須調用Mysql_connect函數。

返回值:選取成功後返回true,失敗時返回false

Mysql_query

函數描述:int mysql_query(string query ,int [link_identifier]);
說明:mysql_query用來根據連接標識符向該數據庫服務器的當前數據庫發送查詢,如果連接標識符默認,則默認爲是上一次打開的連接。Query爲標準SQL語句。

返回值:成功後返回一個結果標識符,失敗時返回false

Mysql_fetch_row

函數描述:int mysql_fetch_row(int result);
說明:mysql_fetch_row用來查詢結果的一行保存至數組,該數組下標從0開始,每一個數組元素對應一個域。通過循環,可以將查詢結果全部獲得。

返回值:返回下行的所有域值,並將其保存至一個數組中,沒有行時返回false

Mysql_fetch_array

函數描述:array int result);
說明:mysql_fetch_arraymysql_fetch_row功能基本相同,只不過它除了可以用從0開始的偏移量作索引,還可以用域名作索引。

返回值返回下一行的所有域值,並將其保存至一個數組中,沒有行時返回false

Mysql_num_rows

函數描述:int (string result);
說明:mysql_num_rows用於計算查詢結果中所得行的數目。

返回值:返回查詢結果中所得行的數目。

Mysql_result

函數描述:int mysql_result(int result , int row , mixed field);
說明:mysql_resultet 用於獲取結果集中指定域的數據。Field可以是一個偏移量,也可以是列名,如果列有別名,還可以用這外別名。

返回值:返回結果集中指定行、指定偏聽偏信移量的數據。

Mysql_close

函數描述:int mysql_close(int [link_identifier]);
說明:mysql_close用於關閉當前與數據庫服務器的連接。

返回值:成功後返回true,失敗時返回false

Session函數

Session_start

函數描述:boolean session_start(void);
功能說明:session_start函數的功能是初始化一個新的session,如果已經存在一個爲該用戶服務的session,則連接原有的session

參數說明:無。
返回值:邏輯類型變量,且值永遠爲真。

Session_destroy

函數描述:boolean session_destroy(void);
功能說明session_destroy結束原有的session 

參數說明:無。
返回值:邏輯類型變量,且值永遠爲真。

Session_register

函數描述:boolean session_register(string name);
功能說明:在session中增加一個變量。

參數說明:“string name”變量名。
返回值:邏輯類型變量。操作成功返回真值。

Session_unregister

函數說明:boolean session_unregister(string name);
功能說明:在session中刪除一個變量。

參數說明:“string name”變量名。
返回值:邏輯類型變量。操作成功返回真值。

Session_is_registered

函數描述:boolean session_is_registered(string name);
功能說明:檢查session中是否存在所指定的變量。

參數說明:“string name”變量名。
返回值:邏輯類型變量。

Session_encode

函數描述:boolean session_encode(void);
功能說明:session_encode函數對當前的session資料編碼,PHP4採用哈希編碼。

參數說明:無。
返回值:邏輯類型變量。編碼成功則返回真值。

Session_decode

函數描述:boolean session_decode(string data);
功能說明:session_decode可以編過碼的資料解碼。

參數說明:“string data”需要解碼的資料。
返回值:邏輯類型變量。

PHP手冊 常用且實用的函數

basename

-- 返回路徑中的文件名部分

例:<?php
$path = "/home/httpd/html/index.php";
$file = basename($path);           // $file is set to "index.php"
$file = basename($path,".php"); // $file is set to "index"?>

array_key_exists

 -- 檢查給定的鍵名或索引是否存在於數組中

如果存在則返回true,不存在則返回false
例:<?php
$search_array = array('first' => 1, 'second' => 4);
if (array_key_exists('first', $search_array)) {
       echo "The 'first' element is in the array";
}
?>
輸出爲:The 'first' element is in the array

Strops

--Find position of first occurrence of a string(查找一個字符串第一次出現的位置)
例:<?php
$mystring = 'abc';
$findme     = 'a';
$pos = strpos($mystring, $findme);
if ($pos === false) {
      echo "The string '$findme' was not found in the string '$mystring'";
} else {
      echo "The string '$findme' was found in the string '$mystring'";
      echo " and exists at position $pos"."<br />";
}
$newstring = 'abcdef abcdef';
$pos = strpos($newstring, 'a', 1); //
返回7而不是
0
?>
輸出爲:
The string 'a' was found in the string 'abc' and exists at position 0
7

Strrops

--Find position of last occurrence of a char in a string(查找一個字符串最後一次出現的位置)
例:<?php
$haystack = 'ababcd';
$needle     = 'aB';

$pos        = strripos($haystack, $needle);

if ($pos === false) {
      echo "Sorry, we did not find ($needle) in ($haystack)";
} else {
      echo "Congratulations!/n";
      echo "We found the last ($needle) in ($haystack) at position ($pos)";
}
?>
輸出爲:
Congratulations! We found the last (aB) in (ababcd) at position (2)
注:strposstrrpos都是不區分大小寫的。

iconv--Convert string to requested character encoding

例:echo iconv("UTF-8", "gb2312", "This is a test."); //把編碼由utf-8轉換爲gb2312(簡體中文)

字符串操作

無論哪種語言,字符串操作都是一個重要的基礎,往往是簡單而重要。正像人說話一樣,一般有形體(圖形界面),有語言(print 字符串?),顯然字符串能解釋更多的東西。PHP提供了大量的字符串操作函數,功能強大,使用也比較簡單,詳細請參看 http://cn2.php.net/manual/zh/ref.strings.php . 以下將簡單的講述它的功能和特性。
弱類型

PHP是弱類型語言,所以其它類型的數據一般可以直接應用於字符串操作函數裏,而自動轉換成字符串類型,進行處理,如:

PHP:   [Copy to clipboard]


echo substr("1234567", 1, 3);


PHP:   [Copy to clipboard]


echo substr(123456,1, 3);


是一樣的

定義

一般用雙引號或單引號標識一個字符串。比如

PHP:   [Copy to clipboard]


$str = "i love u";
$str = 'i love u';



它者兩者是有一些區別的。後者將一切單引號的內容都會當作字符處理;前者則不然。比如

PHP:   [Copy to clipboard]


$test = "iwind";
$str = "i love $test";
$str1 = 'i love $test';
echo $str; //將得到 i love iwind
echo $str1; //將得到 i love $test



同樣的以下兩個例子的行爲也不一樣的:

PHP:   [Copy to clipboard]


echo "i love /test"; // 將得到 i love est,已經將/t視爲轉義
echo 'i love /test'; // 將得到 i love /test



從而可以簡單認爲雙引號裏的內容是經過解釋過的,單引號的是所見即所得的。顯而易見,雙引號形式的更爲靈活一些,當然單引號會適用於一些特殊的場合,這裏就不作闡述了。

輸出

PHP裏的輸出最常用的是echo,print.兩者都不是真正的函數,而是語言構造,所以調用時不必用雙括號(比如echo("test");print("test")).在輸出的時候兩者都可以實現賦值:

PHP:   [Copy to clipboard]


echo $str="test"; //一方面輸出test,一方面把"test"賦給字符串變量 $str
print $str="test";



兩者除了名字不一樣外,還是有其它區別的。print具有返回值,一直返回1,echo沒有,所以echoprint要快一些:

PHP:   [Copy to clipboard]


$return = print "test";
echo $return; // 輸出1



也正因爲這個原因,print能應用於複合語句中,而echo不能:

PHP:   [Copy to clipboard]


isset($str) or print "str 變量未定義"; // 將輸出"str 變量未定義"
isset($str) or echo "str 變量未定義";// 將提示分析錯誤



echo
一次可輸出多個字符串,而print則不可以:

PHP:   [Copy to clipboard]


echo "i ","love ","iwind"; // 將輸出 "i love iwind"
print "i ","love ","iwind"; // 將提示錯誤



echo,print
還可以輸出被稱作文檔句法的字符串,句法如:

PHP:   [Copy to clipboard]


echo <<< 標籤名稱
...
字符串內容
...
標籤名稱;



比如

PHP:   [Copy to clipboard]


echo <<< test
i love iwind
test;



要注意的是語句開始和結束的兩個標籤名稱是一樣的,且後一個標籤名稱前不能有空白,即要頂格寫。文檔句法輸出的內容識別變量名稱和常用符號,大致形同雙引號的作用。

輸出echo,print外,PHP還提供了一些格式化字符串的函數,比如printf,sprintf,vprintf,vsprintf,在這裏不作詳解。


連接

兩個以上的字符串連接用"."操作符,依字符串的順序形成新的字符串。

PHP:   [Copy to clipboard]


$str = "i " . "love " . "iwind";
這裏的$str 就是 "i love iwind";字符串。當然,還可以使用 .= 操作符:
$str = ""; // 初始化
$str .= "i love iwind";



這裏用到了初始化,是因爲未定義變量在使用時會產生一個notice錯誤,""或者null可以簡單地代表空字符串。

長度

PHP提供strlen函數來計算字符串的長度:

PHP:   [Copy to clipboard]


$str = "test";
echo strlen($str); // 將輸出 4


有點奇怪的是strlen將中日等漢字以及全角字符都當作兩個或四個長度計算。好在mbstringicon兩個函數可以幫助解決這個問題,比如:

PHP:   [Copy to clipboard]


$len = iconv_strlen($str, "GBK");
$len = mb_strlen($str, "GBK");


:mbstring模塊提供了大量的對含有多字節字符的字符串的處理函數,推薦多加應用,由於這篇文章講的是字符串入門,所以不打算詳細解說。

分隔與連接

PHP允許你把一個字符串按照一個分隔符進行分隔成一個數組,或者將一個數組組合成一個字符串。看下面的例子:

PHP:   [Copy to clipboard]


$str = "i love iwind";
$array = explode(" ", $str);


上面的explode函數,就把$str字符串按空格字符進行分隔,結果返回一個數組 $array:array("i", "love", "iwind").explode函數有類似功能的有:preg_split(), spliti(), split()等函數。

與此相反的,implodejoin則能把一個數組結合成一個字符串,他們是具有完全相同功能的函數。

PHP:   [Copy to clipboard]


$array = array("i", "love", "iwind");
$str = implode(" ", $array);
例中的implode函數將數組$array的每個元素用空格字符進行連接,返回一個字符串 $str"i love iwind".



裁剪

一個字符串首和尾,可能不是你想要的部分,就可以用trim,rtrim,ltrim等函數,分別去除一個字符串兩端空格,一個字符串尾部空格,一個字符串首部空格。

PHP:   [Copy to clipboard]


echo trim(" i love iwind "); // 將得到 "i love iwind"
echo rtrim(" i love iwind "); // 將得到 " i love iwind"
echo ltrim(" i love iwind "); // 將得到 "i love iwind "


其實這三個參數不僅可以去除字符串首尾的空格,還可以去除它們的第二個參數指定的字符,如:

PHP:   [Copy to clipboard]


echo trim(",1,2,3,4,", ","); // 將得到 1,2,3,4 兩端的","號被裁掉了。



有時還會看到有人使用chop這個函數,其實它是rtrim的同義函數。

大小寫

對於英文字母來說,可以用strtoupper,strtolower將其轉變成大寫或小寫。

PHP:   [Copy to clipboard]


echo strtoupper("i love iwind"); // 將得到 I LOVE IWIND
echo strtolower("I LOVE IWIND"); // 將得到 i love iwind



比較

一般可以用 !=, == 比較兩個對象是否相等,只所以說是兩個對象,是因爲它們不一定全部爲字符串,也可以爲整型等等。比如

PHP:   [Copy to clipboard]


$a = "joe";
$b = "jerry";
if ($a != $b)
{
echo "不相等";
}
else
{
echo "相等";
}


如果用 !==,===(可以看到多了一個等號)比較的話,兩個對象的類型要嚴格相等才能返回true;否則用==,!=則會將字符串自動轉換成相應的類型,以便進行比較.

PHP:   [Copy to clipboard]


22 == "22"; // 返回 true
22 === "22"; // 返回false
//正因爲這樣,所以我們的程序時常會發生一些想不到的"意外"
0 == "我愛你"; // 返回true
1 == "1 我愛你";// 返回true



PHP
裏還有這樣一組用於字符串比較的函數:strcmp,strcasecmp,strncasecmp(), strncmp(),它們都是如果前者比後者大,則返回大於0的整數;如果前者比後者小,則返回小於0的整數;如果兩者相等,則返回0.它們比較的原理與其它語言的規則都是一樣的。
strcmp
是用於區分大小寫(即大小寫敏感)的字符串比較:

PHP:   [Copy to clipboard]


echo strcmp("abcdd", "aBcde"); // 返回 1 (>0), 比較的是 "b""B"



strcasecmp
用於不區分大小寫的字符串比較:

PHP:   [Copy to clipboard]


echo strcasecmp("abcdd", "aBcde"); // 返回 -1 (<0), 比較的是"d""e"



strncmp
用於比較字符串的一部分,從字符串的開頭開始比較,第三個參數,爲要比較的長度:

PHP:   [Copy to clipboard]


echo strncmp("abcdd", "aBcde", 3); // 返回 1 (>0), 比較了 abc aBc



strncasecmp
用於不區分大小寫的比較字符串的一部分,從字符串的開頭開始比較,第三個參數,爲要比較的長度:

PHP:   [Copy to clipboard]


echo strncasecmp("abcdd", "aBcde", 3); // 返回 0, 比較了 abc aBc,

由於不區分大小寫,所以兩者是相同的。

還有一種情況是單單比較字符串大小,達不到我們預定的要求,比如照常理 10.gif 會比 5.gif 大,但如果應用上面幾個函數,就會返回 -1,即表示 10.gif5.gif,針對這種情況,PHP提供了兩個自然對比的函數strnatcmp,strnatcasecmp

PHP:   [Copy to clipboard]


echo strnatcmp("10.gif", "5.gif"); // 返回 1 (>0)
echo strnatcasecmp("10.GIF", "5.gif"); // 返回 1 (>0)



替換

替換的意義在於將一個字符串的一部分進行改變,使之成爲別外一個新的字符串,以滿足新的要求。PHP裏通常用str_replace("要替換的內容", "要取代原內容的字符串", "原字符串")進行替換。

PHP:   [Copy to clipboard]


echo str_replace("iwind", "kiki", "i love iwind, iwind said"); // 將輸出 "i love kiki, kiki said"


即將 原字符串中的所有"iwind"都替換成了"kiki".

str_replace
是大小寫敏感的,所以對你不能設想用 str_replace("IWIND", "kiki",...)替換原字符串中的
"iwind".

str_replace
還可以實現多對一,多對多的替換,但無法實現一對多的替換:

PHP:   [Copy to clipboard]


echo str_replace(array("iwind", "kiki"), "people", "i love kiki, iwind said");


將會輸出
i love people, people said
第一個參數中的array("iwind", "kiki")都被替換成了"people"

PHP:   [Copy to clipboard]


echo str_replace(array("iwind", "kiki"), array("gentle man", "ladies"), "i love kiki, iwind said");


輸出 i love ladies, gentle man said 。也就是說第一個數組中的元素被第二個數組中的相對應的元素替換掉了,如果有一個數組比另一個數組元素數要少,那麼不足的都會當作空來處理。

與此有些類似的是strtr,用法請參閱手冊,它們的比較請參閱
http://diary.4kiki.net/index.php?action=info&id=372 .

此外,PHP還提供了substr_replace,實現替換一部分的字符串。語法如下:
substr_replace (
原字符串, 要替代的字符串, 開始替換的位置 [, 替換的長度
])
其中,開始替換的位置從0開始計算,應該小於原字符串的長度。要替換的長度是可選的。

PHP:   [Copy to clipboard]


echo substr_replace("abcdefgh", "DEF", 3); // 將輸出 "abcDEF"
echo substr_replace("abcdefgh", "DEF", 3, 2); // 將輸出 "abcDEFfgh"


第一個例子中,從第三個位置(即"d")開始替換,從而把 "defgh"都替換成了“DEF”
第二個例子中,也是從第三個位置(即"d")開始替換,但只能替換2個長度,即到e,所以就把"de"替換成了
"DEF".

PHP
還提供了preg_replace,preg_replace_callback,ereg_replace,eregi_replace等函數應用正則表達式來完成字符串替換,用法請參考手冊。


查找與匹配

PHP裏用於查找或者匹配或者定位的函數非常多,它們都有不同的意義。這裏只講述用得比較多的strstr,stristr.後者與前者的功能,返回值都一樣,只是不區分大小寫。
strstr("
母字符串", "子字符串")用來查找子字符串在母字符串中第一次出現的位置,並返回母字符串中從子字符串開始到母字符串結束的部分。比如

echo strstr("abcdefg", "e"); //
將輸出
"efg"
如果找不到子字符串,則返回空。因爲可以用來判斷一個字符串中是否含有另外一個字符串:

PHP:   [Copy to clipboard]


$needle = "iwind";
$str = "i love iwind";
if (strstr($str, $needle))
{
echo "裏面有 iwind";
}
else
{
echo "裏面沒有 iwind";
}
將會輸出"裏面有 iwind"


HTML相關

1,htmlspecialchars($string)

這是它的最簡單用法,將字符串中的一些特殊字符(顧名思義)&,',"<,>轉換成它們對應的HTML實體形式:

PHP:   [Copy to clipboard]


$str = "i love <font color=/"red/">kiki</font>, iwind said.";
echo htmlspecialchars($str);


將會輸出
i love &lt;font color=&quot;red&quot;&gt;kiki&lt;/font&gt;, iwind said.

2,htmlentities($string)

將所有能轉換成實體形式的字符都轉換成實體形式。

3,html_entity_decode($string);

PHP4.3.0以後加入的具有與htmlentities($string)相反的功能。

4,nl2br($string)

將字符串中所有換行符轉變成<br /> + 換行符。如:

PHP:   [Copy to clipboard]


$str = "i love kiki,/n iwind said.";
echo nl2br($str);


將會輸出
i love kiki,<br />
iwind said.


加密

加密字符串最常用的就是md5了,它將一個字符串轉換成一個長32位的唯一的字符串。

PHP:   [Copy to clipboard]


echo md5("i love iwind"); // 將輸出 "2df89f86e194e66dc54b30c7c464c21c"



PHP5
md5加了第二個參數,從而使它可以輸出16位的加密後的字符串。


到這裏,這篇字符串操作入門教程就算結束了,但上面講的這些還只是它的冰山一角,特別是PHP5之後增加了大量的新功能,所以需要我們不斷的去學習它纔有可能很好的應用。

mysql字符串處理函數(手冊)

注意:如果結果的長度大於服務器參數max_allowed_packet,字符串值函數返回NULL
對於針對字符串位置的操作,第一個位置被標記爲1

ASCII(str)

返回字符串str的最左面字符的ASCII代碼值。如果str是空字符串,返回0。如果strNULL,返回NULL

mysql> select ASCII(’2′);
-> 50
mysql> select ASCII(2);
-> 50
mysql> select ASCII(’dx’);
-> 100

也可參見ORD()函數。

ORD(str)

如果字符串str最左面字符是一個多字節字符,通過以格式((first byte ASCII code)*256+(second byte ASCII code))[*256+third byte ASCII code…]返回字符的ASCII代碼值來返回多字節字符代碼。如果最左面的字符不是一個多字節字符。返回與ASCII()函數返回的相同值。

mysql> select ORD(’2′);
-> 50

More…

CONV(N,from_base,to_base)

在不同的數字基之間變換數字。返回數字N的字符串數字,從from_base基變換爲to_base基,如果任何參數是NULL,返回NULL。參數N解釋爲一個整數,但是可以指定爲一個整數或一個字符串。最小基是2且最大的基是36。如果to_base是一個負數,N被認爲是一個有符號數,否則,N被當作無符號數。 CONV64位點精度工作。

mysql> select CONV(”a”,16,2);
-> ‘1010′
mysql> select CONV(”6E”,18,8);
-> ‘172′
mysql> select CONV(-17,10,-18);
-> ‘-H’
mysql> select CONV(10+”10″+’10′+0xa,10,10);
-> ‘40′

BIN(N)

返回二進制值N的一個字符串表示,在此N是一個長整數(BIGINT)數字,這等價於CONV(N,10,2)。如果NNULL,返回NULL

mysql> select BIN(12);
-> ‘1100′

OCT(N)

返回八進制值N的一個字符串的表示,在此N是一個長整型數字,這等價於CONV(N,10,8)。如果NNULL,返回NULL

mysql> select OCT(12);
-> ‘14′

HEX(N)

返回十六進制值N一個字符串的表示,在此N是一個長整型(BIGINT)數字,這等價於CONV(N,10,16)。如果NNULL,返回NULL

mysql> select HEX(255);
-> ‘FF’

CHAR(N,…)

CHAR()將參數解釋爲整數並且返回由這些整數的ASCII代碼字符組成的一個字符串。NULL值被跳過。

mysql> select CHAR(77,121,83,81,’76′);
-> ‘MySQL’
mysql> select CHAR(77,77.3,’77.3′);
-> ‘MMM’

CONCAT(str1,str2,…)

返回來自於參數連結的字符串。如果任何參數是NULL,返回NULL。可以有超過2個的參數。一個數字參數被變換爲等價的字符串形式。

mysql> select CONCAT(’My’, ‘S’, ‘QL’);
-> ‘MySQL’
mysql> select CONCAT(’My’, NULL, ‘QL’);
-> NULL
mysql> select CONCAT(14.3);
-> ‘14.3′

LENGTH(str)

OCTET_LENGTH(str)

CHAR_LENGTH(str)

CHARACTER_LENGTH(str)

返回字符串str的長度。

mysql> select LENGTH(’text’);
-> 4
mysql> select OCTET_LENGTH(’text’);
-> 4

注意,對於多字節字符,其CHAR_LENGTH()僅計算一次。

LOCATE(substr,str)

POSITION(substr IN str)
返回子串substr在字符串str第一個出現的位置,如果substr不是在str裏面,返回0.

mysql> select LOCATE(’bar’, ‘foobarbar’);
-> 4
mysql> select LOCATE(’xbar’, ‘foobar’);
-> 0

該函數是多字節可靠的。

LOCATE(substr,str,pos)

返回子串substr在字符串str第一個出現的位置,從位置pos開始。如果substr不是在str裏面,返回0

mysql> select LOCATE(’bar’, ‘foobarbar’,5);
-> 7

這函數是多字節可靠的。

INSTR(str,substr)

返回子串substr在字符串str中的第一個出現的位置。這與有2個參數形式的LOCATE()相同,除了參數被顛倒。

mysql> select INSTR(’foobarbar’, ‘bar’);
-> 4
mysql> select INSTR(’xbar’, ‘foobar’);
-> 0

這函數是多字節可靠的。

LPAD(str,len,padstr)

返回字符串str,左面用字符串padstr填補直到strlen個字符長。

mysql> select LPAD(’hi’,4,’??’);
-> ‘??hi’

RPAD(str,len,padstr)

返回字符串str,右面用字符串padstr填補直到strlen個字符長。

mysql> select RPAD(’hi’,5,’?');
-> ‘hi???’

LEFT(str,len)

返回字符串str的最左面len個字符。

mysql> select LEFT(’foobarbar’, 5);
-> ‘fooba’

該函數是多字節可靠的。

RIGHT(str,len)

返回字符串str的最右面len個字符。

mysql> select RIGHT(’foobarbar’, 4);
-> ‘rbar’

該函數是多字節可靠的。

SUBSTRING(str,pos,len)

SUBSTRING(str FROM pos FOR len)

MID(str,pos,len)

從字符串str返回一個len個字符的子串,從位置pos開始。使用FROM的變種形式是ANSI SQL92語法。

mysql> select SUBSTRING(’Quadratically’,5,6);
-> ‘ratica’

該函數是多字節可靠的。

SUBSTRING(str,pos)

SUBSTRING(str FROM pos)

從字符串str的起始位置pos返回一個子串。

mysql> select SUBSTRING(’Quadratically’,5);
-> ‘ratically’
mysql> select SUBSTRING(’foobarbar’ FROM 4);
-> ‘barbar’

該函數是多字節可靠的。

SUBSTRING_INDEX(str,delim,count)

返回從字符串str的第count個出現的分隔符delim之後的子串。如果count是正數,返回最後的分隔符到左邊(從左邊數) 的所有字符。如果count是負數,返回最後的分隔符到右邊的所有字符(從右邊數)

mysql> select SUBSTRING_INDEX(’www.mysql.com’, ‘.’, 2);
-> ‘www.mysql’
mysql> select SUBSTRING_INDEX(’www.mysql.com’, ‘.’, -2);
-> ‘mysql.com’

該函數對多字節是可靠的。

LTRIM(str)

返回刪除了其前置空格字符的字符串str

mysql> select LTRIM(’   barbar’);
-> ‘barbar’

RTRIM(str)

返回刪除了其拖後空格字符的字符串str

mysql> select RTRIM(’barbar    ‘);
-> ‘barbar’

該函數對多字節是可靠的。

TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)

返回字符串str,其所有remstr前綴或後綴被刪除了。如果沒有修飾符BOTHLEADINGTRAILING給出,BOTH被假定。如果remstr沒被指定,空格被刪除。

mysql> select TRIM(’   bar    ‘);
-> ‘bar’
mysql> select TRIM(LEADING ‘x’ FROM ‘xxxbarxxx’);
-> ‘barxxx’
mysql> select TRIM(BOTH ‘x’ FROM ‘xxxbarxxx’);
-> ‘bar’
mysql> select TRIM(TRAILING ‘xyz’ FROM ‘barxxyz’);
-> ‘barx’

該函數對多字節是可靠的。

SOUNDEX(str)

返回str的一個同音字符串。聽起來大致相同2個字符串應該有相同的同音字符串。一個標準的同音字符串長是4個字符,但是SOUNDEX()函數返回一個任意長的字符串。你可以在結果上使用SUBSTRING()得到一個標準的同音串。所有非數字字母字符在給定的字符串中被忽略。所有在A-Z之外的字符國際字母被當作元音。

mysql> select SOUNDEX(’Hello’);
-> ‘H400′
mysql> select SOUNDEX(’Quadratically’);
-> ‘Q36324′

SPACE(N)

返回由N個空格字符組成的一個字符串。

mysql> select SPACE(6);
-> ‘       ‘

REPLACE(str,from_str,to_str)

返回字符串str,其字符串from_str的所有出現由字符串to_str代替。

mysql> select REPLACE(’www.mysql.com’, ‘w’, ‘Ww’);
-> ‘WwWwWw.mysql.com’

該函數對多字節是可靠的。

REPEAT(str,count)

返回由重複countTimes次的字符串str組成的一個字符串。如果count <= 0,返回一個空字符串。如果strcountNULL,返回NULL

mysql> select REPEAT(’MySQL’, 3);
-> ‘MySQLMySQLMySQL’

REVERSE(str)

返回顛倒字符順序的字符串str

mysql> select REVERSE(’abc’);
-> ‘cba’

該函數對多字節可靠的。

INSERT(str,pos,len,newstr)

返回字符串str,在位置pos起始的子串且len個字符長得子串由字符串newstr代替。

mysql> select INSERT(’Quadratic’, 3, 4, ‘What’);
-> ‘QuWhattic’

該函數對多字節是可靠的。

ELT(N,str1,str2,str3,…)

如果N= 1,返回str1,如果N= 2,返回str2,等等。如果N小於1或大於參數個數,返回NULLELT()FIELD()反運算。

mysql> select ELT(1, ‘ej’, ‘Heja’, ‘hej’, ‘foo’);
-> ‘ej’
mysql> select ELT(4, ‘ej’, ‘Heja’, ‘hej’, ‘foo’);
-> ‘foo’

FIELD(str,str1,str2,str3,…)

返回strstr1, str2, str3, …清單的索引。如果str沒找到,返回0FIELD()ELT()反運算。

mysql> select FIELD(’ej’, ‘Hej’, ‘ej’, ‘Heja’, ‘hej’, ‘foo’);
-> 2
mysql> select FIELD(’fo’, ‘Hej’, ‘ej’, ‘Heja’, ‘hej’, ‘foo’);
-> 0

FIND_IN_SET(str,strlist)

如果字符串str在由N子串組成的表strlist之中,返回一個1N的值。一個字符串表是被“,”分隔的子串組成的一個字符串。如果第一個參數是一個常數字符串並且第二個參數是一種類型爲SET的列,FIND_IN_SET()函數被優化而使用位運算!如果str不是在strlist裏面或如果strlist是空字符串,返回0。如果任何一個參數是NULL,返回NULL。如果第一個參數包含一個“,”,該函數將工作不正常。

mysql> SELECT FIND_IN_SET(’b',’a,b,c,d’);
-> 2

MAKE_SET(bits,str1,str2,…)

返回一個集合 (包含由“,”字符分隔的子串組成的一個字符串),由相應的位在bits集合中的的字符串組成。str1對應於位0str2對應位1,等等。在str1, str2, …中的NULL串不添加到結果中。

mysql> SELECT MAKE_SET(1,’a',’b',’c');
-> ‘a’
mysql> SELECT MAKE_SET(1 | 4,’hello’,'nice’,'world’);
-> ‘hello,world’
mysql> SELECT MAKE_SET(0,’a',’b',’c');
-> ‘’

EXPORT_SET(bits,on,off,[separator,[number_of_bits]])

返回一個字符串,在這裏對於在“bits”中設定每一位,你得到一個“on”字符串,並且對於每個復位(reset)的位,你得到一個 “off”字符串。每個字符串用“separator”分隔(缺省“,”),並且只有“bits”“number_of_bits” (缺省64)位被使用。

mysql> select EXPORT_SET(5,’Y',’N',’,',4)
-> Y,N,Y,N

LCASE(str)

LOWER(str)

返回字符串str,根據當前字符集映射(缺省是ISO-8859-1 Latin1)把所有的字符改變成小寫。該函數對多字節是可靠的。

mysql> select LCASE(’QUADRATICALLY’);
-> ‘quadratically’

UCASE(str)

UPPER(str)

返回字符串str,根據當前字符集映射(缺省是ISO-8859-1 Latin1)把所有的字符改變成大寫。該函數對多字節是可靠的。

mysql> select UCASE(’Hej’);
-> ‘HEJ’

該函數對多字節是可靠的。

LOAD_FILE(file_name)

讀入文件並且作爲一個字符串返回文件內容。文件必須在服務器上,你必須指定到文件的完整路徑名,而且你必須有file權限。文件必須所有內容都是可讀的並且小於max_allowed_packet。如果文件不存在或由於上面原因之一不能被讀出,函數返回NULL

mysql> UPDATE table_name
SET blob_column=LOAD_FILE(”/tmp/picture”)
WHERE id=1;

MySQL必要時自動變換數字爲字符串,並且反過來也如此:

mysql> SELECT 1+”1″;
-> 2
mysql> SELECT CONCAT(2,’ test’);
-> ‘2 test’

如果你想要明確地變換一個數字到一個字符串,把它作爲參數傳遞到CONCAT()

如果字符串函數提供一個二進制字符串作爲參數,結果字符串也是一個二進制字符串。被變換到一個字符串的數字被當作是一個二進制字符串。這僅影響比較。

常見用來判斷的函數

empty($var) 函數

 //用來檢查變量是否爲空(沒有值或零值)

isset($var)函數

//這個函數測試一個變量看它是否已被定義。

gettype($var)函數

// 返回變量是什麼類型——例如,字符串整數布爾值浮點值

is_bool($var)函數

//測試一個變量看它是否包含一個布爾值(真/假)

is_string($var)函數

//測試一個變量是否爲字符串變量。

is_numeric($var)函數

//這個函數測試一個變量看它是否包含一個數字或數字字符串(字符串包括一個符號、數字與小數點)。

is_array($var)函數

//這個函數測試一個變量看是不是數組

is_null($var)函數

//這個函數測試一個變量看它是否爲NULL。在評估由SQL查詢返回的數據時,用此函數來檢查一個變量是否爲NULL

is_object($var)函數

 //這個函數測試一個變量看它是否爲一個PHP對象。

print_r($var)函數

//這個函數打印一個變量的內容

API函數手冊!!!

什麼是API

 

首先,有必要向大家講一講,什麼是API。所謂API本來是爲CC++程序員寫的。API說來說去,就是一種函數,他們包含在一個附加名爲DLL的動態連接庫文件中。用標準的定義來講,API就是Windows32位應用程序編程接口,是一系列很複雜的函數,消息和結構,它使編程人員可以用不同類型的編程語言編制出的運行在Windows95Windows NT操作系統上的應用程序。可以說,如果你曾經學過VC,那麼API對你來說不是什麼問題。但是如果你沒有學過VC,或者你對Windows95的結構體系不熟悉,那麼可以說,學習API將是一件很辛苦的事情。

如果你打開WINDOWSSYSTEM文件夾,你可以發現其中有很多附加名爲DLL的文件。一個DLL中包含的API函數並不只是一個,數十個,甚至是數百個。我們能都掌握它嘛?回答是否定的不可能掌握。但實際上,我們真的沒必要都掌握,只要重點掌握Windos系統本身自帶的API函數就可以了。但,在其中還應當拋開掉同VB本身自有的函數重複的函數。如,VB
etAttr命令可以獲得文件屬性,SetAttr可以設置文件屬性。對API來講也有對應的函數
GetFileAttributes
SetFileAttributes,性能都差不多。如此地一算,剩下來的也就5600個。是的,也不少。但,我可以敢跟你說,只要你熟悉地掌握100個,那麼你的編程水平比現在高出至少要兩倍。儘管人們說VBWINDOWS具有密切的關係,但我認爲,API更接近
WINDOWS
。如果你學會了API,首要的收穫便是對WINDOWS體系結構的認識。這個收穫是來自不易的。

如果你不依靠API會怎麼樣?我可以跟你說,絕大多是高級編程書本(當然這不是書的名程叫高級而高級的,而是在一開始的《本書內容》中指明《本書的閱讀對象是具有一定VB基礎的讀者》的那些書),首先提的問題一般大都是從API開始。因此可以說,你不學API,你大概將停留在初級水平,無法往上攀登。唯一的途徑也許就是向別人求救我快死了,快來救救我呀,這個怎麼辦,那個怎麼辦?煩不煩呢?當然,現在網上好人太多(包括我在內,嘻嘻),但,你應當明白,通過此途徑,你的手中出不了好的作品。這是因爲缺乏這些知識你的腦子裏根本行不成一種總體的設計構思。

API文本遊覽器

 

很多API函數都是很長很長的。想看什麼樣子嗎?如下就是作爲例子的API DdeClientTransaction函數
Declare Function DdeClientTransaction Lib "user32" (pData As Byte, ByVal cbData As Long, ByVal hConv As Long, ByVal hszItem As Long, ByVal wFmt As Long, ByVal wType As Long, ByVal dwTimeout As Long, pdwResult As Long) As Long
哇!這麼長?如果你從來沒有接觸過API,我想你肯定被嚇住了。你也許考慮,該不該繼續學下去。不過不要擔心,幸運的是Microsoft的設計家們爲我們提供了有用的工具,這便是API文本查看器。

通過API文本查看器,我們可以方便地查找程序所需要的函數聲明、結構類型和常數,然後將它複製到剪貼板,最後再粘貼到VB程序的代碼段中。在大多數情況下,只要我們確定了程序所需要的函數、結構和常數這三個方面後,就可以通過對API文本遊覽器的以上操作將他們加入到程序段中,從而程序中可以使用這些函數了。這些是學習API最基本的常識問題,它遠遠佔不到API的龐大的體系內容。今後我們把精力浪費(這絕不是浪費)在哪裏呢?那就是
什麼時候使用什麼函數,什麼時候使用什麼結構類型,什麼時候使用什麼常數。

API函數聲明

 

讓我們回想一下。在VB中,如何聲明函數呢?我想,如果你正在看此文,那麼你絕對能夠回答得出這個問題。以下便是你應該很熟悉的函數聲明
Function SetFocus (ByVal hwnd As Long) As Long
即,這行代碼定義了名爲SetFocus的函數,此函數具有一個Long型數據類型的參數,並按值傳遞(ByVal),函數執行後將返回一個Long型數據。
API
函數的聲明也很類似,如,API中的SetFocus 函數是這樣寫的

Declare Function SetFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
有點複雜了一些。是的,是複雜了點。但我可以告訴你,除了這些多出來的部分,其他部分還是和你以前學到的東西是一樣的。函數在程序中的調用也是一樣。如:
Dim dl As Long
dl&=SetFoucs(Form1.Hwnd)
但,一點是清楚的。它不象你自己寫的程序那樣能夠看到裏面的運行機理,也不像VB
自帶的函數那樣,能夠從VB的聯機幫助中查到其用法。唯一的方法就是去學、查VB以外的資料。

Declare
語句用於在模塊級別中聲明對動態鏈接庫 (DLL) 中外部過程的引用。對此,你只要記住任何API函數聲明都必須寫這個語句就可以了。
Iib
指明包含所聲明過程或函數的動態鏈接庫或代碼資源。也就是說,它說明的是,函數或過程從何而來的問題。
如在上例中,SetFocus Lib "user32"說明 函數 SetFocus 來自 user32.dll文件。主要的dll動態連接庫文件有
user32.dll Windows
管理。生成和管理應用程序的用戶接口。

GDI32.dll
圖形設備接口。產生Windows設備的圖形輸出
Kernel32.dll
系統服務。訪問操作系統的計算機資源。
注意,當DLL文件不在WindowsSystem文件夾中的時候,必須在函數中說明其出處(
路徑)。如,SetFocus Lib "c:/Mydll/user32"
函數聲明中的Alias 是可選的。表示將被調用的過程在動態鏈接庫 (DLL) 中還有另外的名稱(別名)。如,Alias "SetFocus" ,說明SetFocus函數在User32.dll中的另外一個名稱是,
SetFocus
。怎麼兩個名都一樣呢?當然,也可以是不同的。在很多情況下,Alias說明的函數名,即別名最後一個字符經常是字符A,如SetWindowsText函數的另一個名稱是
SetWindowsTextA,
表示爲Alias "SetWindowsTextA"。這個A只不過是設計家們的習慣的命名約定,表示函數屬於ANSI版本。

那麼,別名究竟有什麼用途呢?從理論上講,別名提供了用另一個名子調用API的函數方法。如果你指明瞭別名,那麼 儘管我們按Declare語句後面的函數來調用該函數,但在函數的實際調用上是以別名作爲首要選擇的。如,以下兩個函數(Function,ABCD)聲明都是有效的,他們調用的是同一個 SetFocus函數
Declare Function SetFocus Lib "user32" "SetFocus" (ByVal hwnd As Long) As Long
Declare ABCD SetFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long

需要注意的是,選用Alias的時候,應注意別名的大小寫;如果不選用Alias 時的時候,函數名必須注意大小寫,而且不能改動。當然,在很多情況下,由於函數聲明是直接從API
文本遊覽器中拷貝過來的,所以這種錯誤的發生機會是很少的,但您有必要知道這一點。
最後提醒你一句,API聲明(包括結構、常數)必須放在窗體或模塊的"通用(General Declarations)段。

數據類型與"類型安全"

 

API函數中使用的數據類型基本上和VB中的一樣。但作爲WIN32API函數中,不存在Integer
數據類型。另外一點是在API函數中看不到Boolean數據類型。 Variant數據類型在API函數中是以Any的形式出現,如Data As Any。儘管其含義是允許任意參數類型作爲一個該API函數的參數傳遞,但這樣做存在一定的缺點。其原因是,這將會使得對目標參數的所有類型檢查都會被關閉。這自然會給各種類型的參數調用帶來了產生錯誤的機會。

爲了強制執行嚴格的類型檢查,並避免上面提到的問題,一個辦法是在函數裏使用上面提到到Alias技術。如對API函數 GetDIBits 可進行另外一種聲明方法。如下
GetDIBits
函數的原型
Public Declare Function GetDIBits Lib "gdi32" Alias "GetDIBits" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
GetDIBits
函數的改型

Public Declare Function GetDIBitsLong Lib "gdi32" Alias "GetDIBits" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Long, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
通過本課程前面所學到的知識,我們已經可以得知原型 GetDIBits函數也好,改型 GetDIBitsLong函數也好,實際將調用的都是Alias所指定的 GetDIBits原函數。但你應當看到,兩者的區別在於,我們在改型的函數中強制指定lpBits參數爲Long形。這樣就會使得函數調用中發生的錯誤機率減少到了最小。這種方法叫做"安全類型"聲明。

API
函數中經常看到的數據類型有∶Long,String,Byte,Any....(也就這些吧。)

常 數

 

對於API常數來講,沒有什麼太特別的學問。請看VB中的以下代碼
Msg = MsgBox("
您好", vbOKCancel)
我們知道, vbOKCancel這個常數的值等於1。對上面的代碼我們完全可以這樣寫,而不會影響代碼的功能
Msg = MsgBox("
您好", 1)
但你大概不太願意選擇後一種,因爲這會使得看懂代碼費勁起來。這種方法也被API採取了。只是API常數必須在事情之前做好初始化聲明VB本身是看不懂的。其內容仍然來自與API
文本遊覽器。具體形式如下等等

Public Const ABM_ACTIVATE = &H6
Public Const RIGHT_CTRL_PRESSED = &H4
Public Const RPC_E_SERVER_DIED = &H80010007
Private Const RPC_S_CALL_FAILED_DNE = 1727&
在常數的初始化中,有些程序使用Global,如Global Const ABM_ACTIVATE = &H6,但我認爲Public完全可以代替它。過去我也用過Global,但現在不大用了。一會兒用這個,一會兒用那個,各程序之間不能保持一致性了,起碼看起來彆扭。

結 構

 

結構是CC++語言中的說法。在VB中一般稱爲自定義數據類型。想必很多朋友都已經認識它。在API領域裏,我更喜歡把它叫做結構,因爲API各種結構類型根本不是我定義(
自定義)的。
VB中,API結構同樣由TYPE.......END TYPE語句來定義。如,在API中,點(Point)結構的定義方法如下:
Public Type POINTAPI
X As Long '
點在X座標(橫座標)上的座標值

Y As Long '
點在Y座標(縱座標)上的座標值
End Type
又如,API中矩形(Rect)結構的定義如下
Public Type RECT
Left As Long '
矩形左上角的X座標
Top As Long '
矩形左上角的Y座標
Right As Long '
矩形右下角的X座標
Bottom As Long '
矩形右下角的Y座標

End Type
這些內容同樣可以從API文本遊覽器中拷貝過來。這些結構中的變量名可隨意改動,而不會影響結構本身。也就是說,這些成員變量都是虛擬的。如,POINTAPI結構可改爲如下
Public Type POINTAPI
MyX As Long '
點在X座標(橫座標)上的座標值
MyY As Long '
點在Y座標(縱座標)上的座標值
End Type
不過,一般來講,是沒有這種必要的。結構本身是一種數據類型,因此,使用時必須聲明具體變量爲該結構型,才能在程序中真正使用到該結構。結構的聲明方法和其他數據的聲明方法一樣,如,以下語句把變MyPoint聲明爲POINTAPI結構類型

MyPoint As POINTAPI
引用結構中的成員變量也十分簡單,在結構名後面加上一個"",然後緊接着寫要引用的成員變量即可。這很象VB中的引用一個對象的某個屬性。如,假如我們把上面已經聲明的MyPoint結構中的X變量的值賦給變量Temp&
則代碼如下
Temp&=MyPoint.X
但,特別注意的是,你千萬不要認爲上例中的MyPoint是一個值。它不是值,而是地址(
指針)。值和地址是完全不同的概念。結構要求按引用傳遞給WINDOWS函數,即所有API
函數中,結構都是按ByRef傳遞的(Declare語句 中ByRef是默認型)。對於結構的傳遞,你不要試圖採用ByVal,你將一無所獲。由於結構名實際上就是指向這個結構的指針(這個結構的首地址),所以,你也就傳送特定的結構名就可以了(參見小結,我用紅色字體來突出了這種傳遞方式)

由於結構傳送的是指針,所以函數將直接對結構進行讀寫操作。這種特性很適合於把函數執行的結果裝載在結構之中。

小 結

 

以下的程序是爲了總結本課中學到的內容而給出的。啓動VB,新建一個項目,添加一個命令按鈕,並把下面的代碼拷貝到代碼段中,運行它。

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Type POINTAPI '
定義點(Point)結構
X As Long '
點在X座標(橫座標)上的座標值
Y As Long '
點在Y座標(縱座標)上的座標值
End Type
Sub PrintCursorPos( )
Dim dl AS Long
Dim MyPoint As POINTAPI
dl&= GetCursorPos(MyPoint) '
調用函數,獲取屏幕鼠標座標

Debug.Print "X=" & Str(MyPoint.X) & " and " & "Y=" & Str(MyPoint.Y)
End Sub
Private Sub Command1_Click()
PrintCursorPos

End Sub

輸出結果爲(每次運行都可能得到不同的結果,這得由函數調用時鼠標指針在屏幕中所處的位置而決定)∶
X= 240 and Y= 151

程序中,GetCursorPos函數用來獲取鼠標指針在屏幕上的位置。

以上例子中,你可以發現,以參數傳遞的MyPpint結構的內容在函數調用後發生了實質性變化。這是由於結構是按ByRef傳遞的

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章