PHP常用函数手册
PHP常用函数手册判断一个编程语言的功能强弱,可以从他的库函数入手。一个较好的编程语言,必然有较强的库函数。
I/O函数
Flush
函数描述:flush();
说明:函数Flush刷新PHP的输出缓存,它尽量将缓和存中的内容输出到用户的浏览器。
返回值:无
函数描述: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返回true(1);否则返回false(0)。
例子:
<?
$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]);
说明:函数eregi与ereg相类似,不同之处是函数eregi进行匹配时不区分大小写。
返回值:若至少有一处相匹配,函数eregi返回true(1),否则返回false(0)。
Eregi_replace
函数描述:string Eregi_replace(string pattern,string replacement,string string);
说明:函数eregi_replace与ereg_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所能返回的最大值
Log(Log10)
函数描述:Double log(double number);
返回值:返回参数number的自然对数(返回以10为底的对数)
Max (<->Min)
函数描述:mixed max(mixed arg1, mixed arg2, …,mixed argn);
返回值:返回此数组中的最大值(最小值),若参数中有浮点数,则所有参数转化成浮点数,返回值也为浮点数;否则所有参数转化成整数,返回值为整数。
pi
函数描述:double pi();
返回值:函数pi返回圆周率的近似值。
Pow
函数描述:double pow(double base,double power);
返回值:函数pow返回参数base的power次幂。
Rand
函数描述:int rand(int lowest,int longest);
说明:函数rand使用前要用srand激活。
返回值:函数rand返回可选参数lowest和longest之间的一个数(包含两个参数);若无参数,则返回值的范围从零到getrandmax返回的整数。
Round
函数描述:double round(double number);
返回值:函数round返回最接近参数number的整数。
Sin
函数描述:double sin(double angle);
返回值:函数sin返回一个用弧度表示的角的正弦值。
Sqrt
函数描述:double sqrt(double number);
说明:在函数sqrt中,参数number不能小于0。
返回值:函数sqrt返回参数number的平方根。
Srand
函数描述:srand(int seed);
说明:函数srand激活随机数发生器。参数seed是随机产生的种子,即所得的随机数是由参数经过一系列计算所的。
返回值:无。
Tan
函数描述:double tan(duoble angle);
返回值:函数tan返回以弧度表示的角的正切值。
时间函数
CheckDate
函数描述:int checkdate(int month,int date,int year);
说明:在PHP中谔谔所谓合法日期,指的是参数year介于1900~32767之间,month介于1~12之间,day处于当前月的有效日期之间的日期。
返回值:若输入的日期合法,返回true(1);否则返回false(0)。
Date
函数描述:string date(string format, int [timestamp]);
说明:函数date根据参数format生成一个描述日期timestamp的字符串。参数timestamp可选,若给定,则为所需的时间戳,即从1970年1月1日开始的秒数;若为空白,则使用当前日期。Format代码如下表:
返回值:函数date返回生成的日期描述字符串。
函数date的format代码表
代 码 描 述
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 getdate(int[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返回给出日期的时间戳,即从1970年1月1日开始的秒数。所有参数都可选,若为空,则使用当前值。若某参数超过范围,函数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返回一个字符串,其组成为两个由空格隔开的成员,第一个成员是系统时间的毫秒数,第二个成员是从1970年1月1日开始计的秒数,即系统时间的时间戳。
字符串操作函数
AddSlashes
函数描述:string addslashes(string string);
说明:函数addslashes在参数string中的单引号(‘)、双引号(“)、反斜杠(/)和空格前添加反斜杠(/)。
返回值:函数addslashes返回添加后的字符串参数string。
Chop
函数描述:string chop(string string);
返回值:函数chop去除参数string中最后一个非空字符后的所有空格,并返回生成的新字符串。
Chr
函数描述:string chr(int ascii);
返回值:函数chr根据所给的ASCII码返回相对应的字符。
Eval
函数描述:eval(string phpcode);
说明:函数eval将参数phpcode作为PHP脚本中的一行代码执行,括号内应用单引号或退格美元符。
返回值:无。
Explode
函数描述:array explode(string separator,string string);
返回值:函数explode返回一个字符串数组,数组元素是由参数separator分隔的参数string的各段内容。
Htmlspecialchars
函数描述:string htmlspecialchars(string string);
说明:在HTML中,某些字符与特殊意义,为保留其原意,则将他们用HTLM语言描述。
‘&’转换为“&”
‘ ” ’转换为‘&qout’
‘<’转换为’ < ’
‘>’转换为‘>’
返回值:函数htmlspecialchars返回转变后的字符串。
Implode
函数描述:string implode(array pieces ,string glue);
返回值:将数组pieces依次用参数glue联结并返回生成的字符串
Jion
函数描述:string join(array pieces ,string glue);
说明:函数jion与函数implode作用完全相同。
Ltrim
函数描述:string ltrim(string string);
返回值:去除参数string中第一个非空字符前的所有空格,并返回生成的新字符串。
Nl2br
函数描述:string nl2br(string string);
返回值:在所有的新行前插入“<br>”,并生成新的字符串。
Ord
函数描述:int ord(string string);
返回值:返回所有字符的ASCII码。
QuoteMeta
函数描述:string quotemeta(string string);
返回值:此函数返回一个字符串,该字符串在参数string中的下列元素前加反斜杠:“.”“+”“//”“*”“?”“[”“]”“^”“(”“)”“$”
RawurldeCode
函数描述:string rawurldecode(string string);
返回值:将原参数字符串string中的百分号(%)及其后的两位十六进制数替换成对应的文本字符,并返回替换后的字符串。
Sprintf
函数描述:string sprintf(string format,mixed[string]);
返回值:与函数printf作用类似,不同之处是他不将原需输出的字符串发送给浏览器,而是返回该字符串。
Strchr
函数描述:string strchr(string string ,string needle);
说明:与函数strstr的作用相同。
Strcmp
函数描述:int strcmp(string str1,string str2);
说明:函数strcmp比较参数Str1与str2的大小,比较过程区分大小写。
返回值:如果str1大于str2,则函数strcmp返回1;如果str1小于str2,则返回-1;如果两者相等,则返回0。
Strcspn
函数描述:int strcspn(string str1 ,string str2);
返回值:从参数str1的首字符开始,不包括参数str 2中任意一个字符的最短字符串的长度。
(即str2在str1中的位置,返回的位置从0开始。)
StripSlashes
函数描述:string stripslashes(string string);
说明:删除参数string中的反斜杠字符。
返回值:返回经过上述操作的字符串。
Strlen
函数描述:int strlen(string string);
返回值:返回参数字符串string的长度。
Strpos
函数描述:int strops(string string ,string needle);
说明:函数strpos中参数needle以整个字符串起作用。若参数needle为一个数字,则函数自动将其转化成整数并作为相对应的ASCII码使用。
返回值:函数strpos返回参数needle在字符串参数string中的最先位置,位置数从0开始。若在字符串string中不包含needle,则返回false(0)。
Strrpos
函数描述:int strrpos(string string ,string needle);
说明:与函数strpos不同,函数strrpos中,参数needle中起作用的只是其首字符。若参数needle为一个数字,则函数自动将其转化成整数并作为相对应的ASCII码使用。
返回值:函数strrpos返回参数needle在字符串参数string中的最后位置,位置数从0开始。若在字符串string中不包含needle,则返回false(0)。
Strrchr
函数描述:string strrchr(string string ,string needle);
说明:在函数strrchr中,参数needle中起作用的只是其首字符。若参数needle为一个数字,则函数自动将其转化成整数并作为相对应的ASCII码使用。
返回值:函数strrchr返回string中由最后一个needle字符开始及其之后的所有部分。若在字符串string中不包含needle,则返回false(0)。
Strrev
函数描述:string strrev(string string);
返回值:函数strrev将参数string倒置并返回。
StrStr
函数描述:string strstr(string string ,string needle);
说明:若参数needle为一个数字,则函数自动将其转化成整数并作为相对应的ASCII码使用。
返回值:函数strstr返回参数string中从参数needle开始及其之后的部分,包括参数needle。
Strtok
函数描述:string strtok(string str1,string str2);
返回值:返回参数str1中在参数str2首字母前的字符串。
Strtolower(<-> Strtoupper)
函数描述:string strtolower(string string);
说明:jiang参数string中的大写字母替换成小写字母。
返回值:替换后的字符串。
Strtr
函数描述:string strtr(string string ,string from ,string to);
说明:函数strtr将参数string中字符from替换成字符to,若参数from和参数to的长度不同,则较长字符串中超过较短字符串长度的部分将被丢弃。
返回值:返回替换后的字符串。
Substr
函数描述:string substr(string string,int start,int [length]);
说明:函数substr从参数string中的第start个字符开始,提取出一个长度为length的字符串。如果参数start是正数,则返回字符串将从参数string首部起第start个字符开始;若为负数,则返回字符串将从参数string尾部逆推的第start个字符开始。如果参数给出并为正,,则返回的是一个从start开始的长度为length的字符串;如果参数length给出且为负,则返回的字符串以正数第start位字符为首,以从参数string尾部开始逆推(-length)个字符为结束的字符串;若返回的字符串长度为负,则返回值为NULL。
返回值:返回所提取出的字符串。
Trim
函数描述:string trim(string string);
说明:函数trim的作用等同于函数chop和ltrim共同对参数随同日内阁进行操作。
返回值:函数trim去除参数string首尾空格并返回新生成的字符串
文件操作函数
Basename
函数描述:string basename(string path);
返回值:返回路径path底端的文件名。
Chdir
函数描述:int chdir(string directory);
说明:函数chdir改变PHP脚本的默认路径。
返回值:如果改变成功,返回true(1),否则返回false(0)。
Chgrp
函数描述:int chgrp(string filename ,string group);
说明:在UNIX中函数chgrp改变一个文件所在的组,但在Windows下该函数返回true(1)而无任何作用。
返回值:如果改变成功,返回true(1);否则返回false(0)。
Chmod
函数描述:int chmod(string filename,int mode);
说明:函数根参数mode给出的文件模式,对给出的文件设置UNIX权限。文件模式如下表:
返回值:如改变成功,返回true(1);否则返回发false(0)。
文件模式表
模 式 描 述
0 文件不许访问
1 文件可执行
2 文件可写
4 文件可读
Chown
函数描述:int chown(string ,string user);
说明:此函数改变文件所有者的名字。
返回值:如果改变成功,返回true(1);否则,返回false(0)。
Closedir
函数描述:int closedir(int directory_handle);
说明:在一个路径被函数opendir打开后,用此函数关闭该路径。
返回值:如果关闭成功,返回true(1);否则,返回false(0)。
Copy
函数描述:int copy(string oldfilename ,string newfilename);
说明:copy把由原参数oldfilename说明的文件复制到由目的参数newfilename说明的文件中。
返回值:如果复制成功,返回true(1);否则,返回false(0)。
Dir
函数描述:obj dir(string directory);
返回值:函数返回一个目录对象,该对象有两个属性:句柄和路径。句柄可被其他目录函数使用,路径是用来生成目录对象的字符串。如果出错,则返回false(0)。
Fclose
函数描述:int fclose(int file_handle);
说明:此函数关闭一个已打开的文件。参数file_handle为一个文件被打开时产生的句柄。
返回值:如果关闭成功,返回true(1);否则,返回false(0)。
Feof
函数描述:int feof(int file_handle);
说明:在读取文件时,PHP始终保持一个指向该文件末尾的指针。函数feof用以确定读取指针是否已到达文件末尾。
返回值:若文件读取指针达到文件末尾,函数feof返回ture(1);否则返回false(0)。
Fgetc
函数描述:string fgetc(int file_handle);
说明:参数file_handle是一个文件被打开时产生的句柄。
返回值:函数fgetc从一个已经对打开的文件中读取一个单个字符。如出错,则返回false(0)。
Fgets
函数描述:string fgets(int file_handle, int length);
返回值:返回从文件中读取的字符串,文件由文件句柄file_handle指定,读取长度将根据length-1尽可能的读取字符,支行结束或文章末尾。若出错,则返回false(0)。
Fgetss
函数描述:string fgetss(int file_handle,int length);
返回值:与fgets相类似,只是在返回字符串时,试着剥去HTML或PHP代码。
File
函数描述:array file(string filename);
返回值:函数返回一个数组,数组的元素一次是文件的每一行,数组下标从开始。若出错,则返回false(0).
File_exists
函数描述:int file_exists(string filename);
说明:此函数用来确定文件是否存在。
返回值:若存在,返回true(1);否则返回false(0)。
Fileatime
函数描述:int fileatime(string filename);
返回值:以标准时间戳的格式,即从1971年1月1日起以秒计,返回最近改变文件的时间。在Windows下返回文件的生成时间。
Filectime
函数描述:int filectime(string filename);
返回值:在UNIX下,函数filectime返回以标准时间戳的格式,即从1971年1月1日起以秒计,返回最近改变文件的时间。在Windows下返回文件的生成时间。
Filegroup
函数描述:int filegroup(string filename);
返回值:在UNIX下,返回所给文件的组标志符,若出错则返回false(0)。在windows下总返回false(0)。
Fileinode
函数描述:int fileinode(string filename);
返回值:在UNIX下,返回所给文件的inode,若出错则返回false(0)。在windows下总返回false(0)。
Filemtime
函数描述:int filemtime(string filename);
返回值:函数filemtime返回以标准时间戳的格式,即从1971年1月1日起以秒计,返回最近改变文件的时间。该函数在UNIX和Windows下运行的结果一样。
Fileowner
函数描述:int fileowner(string filename);
返回值:在UNIX下,函数返回文件所有者的用户标识符,若出错则返回false(0)。在windows下总返回false(0)。
Fileperms
函数描述:int fileperms(string filename);
返回值:返回文件的许可权,若出错则返回false(0)。
Filesize
函数描述:int filesize(string filename);
返回值:返回所给文件打消的字节数。
Filetype
函数描述:int filetype(string filename);
返回值:函数filetype返回所给文件的类型作为描述的字符串,可能值为block,char,dir,fifo,file,link和unknown。
Fopen
函数描述:int fopen(string filename,string mode);
说明:函数fopen根据参数filename和mode打开一个文件以便读写。若参数filename以“http://”或“ftp://”开始,则文件通过Internet用http或ftp协议打开;否则文件在本地系统内打开。
若模式带有“+”号,则为更新模式,它允许同时读和写;若字母“b”出现在模式的最后部分,则该文件被认为是二进制文件。(文件打开模式参见下表)
文件打开模式表
模 式 说 明
r 以只读模式打开一个文件,并将文件内部指针指向文件开头
r+ 以可读可写模式打开一个文件,并将文件内部指针指向文件开头
w 以只写模式打开一个文件,并将原文件内容清空,并将文件内部指针指向文件开头;若指定文件不存在,则创建一个名为filename的新文件。
w+ 以可读可写模式打开一个文件,并将原文件内容清空,并将文件内部指针指向文件开头;若指定文件不存在,则创建一个名为filename的新文件。
a 以只写模式打开一个文件,并将文件内部指针指向文件末尾;若指定文件不存在,则创建一个名为filename的新文件。
a+ 以可读可写模式打开一个文件,并将文件内部指针指向文件末尾;若指定文件不存在,则创建一个名为filename的新文件。
Fpassthru
函数描述:int fpassthru(int file_handle);
返回值:函数fpassthru向浏览器输出文件,完成后将文件关闭。若出错则返回发false(0)。
Fputs
函数描述:int fputs(int file_handle,string output);
说明:函数fputs将数据写入一个打开的文件。
返回值:如果写入成功,返回true(1);否则返回false(0)。
Fread
函数描述:string fread(int file_handle,string length);
返回值:函数fread返回从指定文件中读取的字符串,当字符串长度等于参数length或文件结束时,读取结束。若读取失败,则返回false(0)。
Fseek
函数描述:int fseek(int file_handle,int offset);
说明:函数fseek修改PHP中一个已打开文件的内部指针,其偏移量即距离文件头的字节数等于参数offset。
返回值:若修改成功,函数fseek返回0;否则返回-1。这需要读者注意。
Ftell
函数描述:int ftell(int file_handle);
返回值:函数ftell返回PHP文件内部指针的偏移量。
Fwrite
函数描述:int fwrite(int file_handle, string string, int [length]);
说明:函数fwrite将字符串string写入由文件句柄file_handle指定的文件。若可选参数length给出,则当字符串string结束或写入长度达length时写入结束。
返回值:若写入成功,返回true(1);否则返回false(0)。
提示:以字符“gz”开始的库函数,用于对压缩文件的操作。
Gzclose
函数描述:int gzclose(int file_handle);
说明:关闭由gzopen打开的文件。
返回值:若关闭成功返回true(1);否则返回false(0)。
(Gzof、Gzfile、Gzgetc、Gzgets、Gzgetss、Gzopen、Gzpassthru、Gzputs、Gzrewind、Gzseek、Gztell)与前面的文件操作函数类似。
Is_dir
函数描述:int is_dir(string filename);
返回值:若给出的参数filename是一个目录,则函数is_dir返回true(1);否则返回false(0)。
Is_executable
函数描述:int is_executable(string filename);
返回值:如果文件存在且可执行,返回true(1);否则返回false(0)。
Is_file
函数描述:int is_file(string filename);
返回值:如果参数filename]所指的文件存在且是一个正常的文件,则函数is_file返回true(1);否则返回false(0)。
Is_link
函数描述:int is_link(string dilename);
返回值:如果参数filename是符号连接,则函数is_link返回true(1);否则返回false(0)。
Is_readable
函数描述:int is_readable(string filename);
返回值:如果文件存在且可读,则函数is_readable返回true(1);否则返回false(0)。在UNIX中,取决于文件的许可权,在Windows中函数的返回值总为true。
Is_writeable
函数描述:int is_writeable(string filename);
返回值:如果文件存在且可写,则函数is_writeable返回true(1);否则返回false(0)。
Link
函数描述:int link(string source,string destination);
说明:函数link生成一个硬链接。在Windows中,该函数不起任何作用,也不返回任何值。
Mkdir
函数描述:int mkdir(string directory,int mode);
说明:函数mkdir用所给的名字创建一个新的目录,许可权根据模式参数进行设置。
返回值:目录创建成功,返回true(1);否则返回false(0)。
Opendir
函数描述:int opendir(string directory);
返回值:函数opendir根据所给目录名directory返回一个目录句柄。
Pclose
函数描述:int pclose(int file_handle);
说明:关闭由popen函数打开的文件流。
Popen
函数描述:int popen(string command,string mode);
说明:函数popen打开一个通向正在执行的命令的管道,该管道可读可写。
返回值:函数popen返回一个文件句柄。
Readdir
函数描述:string readdir(int directory_handle);
返回值:函数readdir返回由目录句柄directory_handle指定目录中的下一个文件的文件名。
Readfile
函数描述:int readfile(string filename);
说明:用函数readfile读取所给的文件并直接发送给浏览器。若参数filename是以http://或ftp://开头的,则相应地用http或ftp协议读取文件。
Readgzfile
与readfile类似,只是他作用于压缩文件。
Readlink
函数描述:string readlink(string filename);
返回值:函数readlink返回一个符号链接所指的路径;若出错,则返回false(0)。
Rename
函数描述:int rename(string old_name,string new_name);
说明:函数rename将参数old_name指定的文件名改变为由参数new_name指定的文件名。
返回值:若改变成功,返回true(1);否则返回false(0)。
Rewind
函数描述:int rewind(int file_handle);
说明:函数rewind将PHP的内部文件指针移到文件头。
Rewinddir
函数描述:int rewinddir(int directory_handle);
说明:函数rewinddir将PHP的内部指针重置到一目录列表的开头。
返回值:若重置成功,则函数rewinddir返回true(1);否则返回false(0)。
Rmdir
函数描述:int rmdir(string directory);
说明:利用函数rmdir可以删除一个目录。
返回值:若删除成功,则函数rmdir返回true(1);否则返回false(0)。
Stat
函数描述:array stat(string filename);
说明:函数stat执行C语言中的stat函数并返回一个由13个元素的数组。元素如表所示:
返回值:函数stat返回生成的数组。
函数stat的返回数组元素表
元 素 下 标 元 素 内 容
0 文件所在设备或驱动器字母
1 索引节点
2 文件模式
3 链接数
4 用户
5 文件所在组
6 设备类型或驱动器字母
7 文件大小
8 文件的最后访问时间
9 文件的最后修改时间
10 文件的最后改变或生成时间
11 块大小
12 块数目
Symlink
函数描述:int symlink(string source,string destination);
说明:函数symlink用目的参数中的名字创建一个符号链接到源参数。
返回值:若创建成功,返回true(1);否则返回false(0)。
Touch
函数描述:int touch(string filename,string [time]);
说明:函数将文件的最近修改时间设置为给出的时间time,time为从1970年1月1日起的秒数。若time默认,则使用当前时间。
Umask
函数描述:int umask(int [umask]);
说明:函数返回文件创建时赋予的默认的许可权。
返回值:若给出了可选参数umask,则函数返回参数umask与0777的逻辑与。在Windows下,该函数不起任何作用,且返回false(0)。
Unlink
函数描述:int unlink(string filename);
说明:函数unlink永久删除一个文件。
返回值:若删除成功,则函数unlink返回true(1);否则返回false(0)。
其他函数
Include
函数描述:include (string filename);
说明:函数include使PHP编译器打开并执行所给的文件。该文件被看作普通的PHP脚本。也可以通过URL以http://或ftp://开头来指明文件。
返回值:无。
Require
函数描述:require (string filename);
说明:函数require使PHP编译器打开并执行所给的文件。该文件被看作普通的PHP脚本。也可以通过URL以http://或ftp://开头来指明文件。
返回值:无。
从表面上看,函数include和require的作用是相同的,我们可以用它们将一些包含已编写代码的文件引入到PHP程序中。在这些文件中,主要存储需要重复使用的常量、变量声明和一些函数的声明和定义。函数include和require的使用,可以使复杂的PHP程序变得简洁明了。
但在实际执行过程中,这两个函数有着很大的差别。函数require通常放在PHP程序的最前面,PHP程序开始执行,就会先读入require所指定的文件,将它变成PHP程序的一部分。常用的自定义函数可以通过这种方法引入PHP程序。而函数include通常放在PHP程序的循环结构中,每次程序运行include语句,就将include所指定的文件引入PHP程序执行一遍。
Header
函数描述:int header(string http_header);
说明:函数hader发送一个http头标给浏览器,需要注意的是,函数必须将任何输出发送给浏览器之前调用。
返回值:如果发送成功,函数header返回true(1);否则返回false(0)。
Getenv
函数描述:string getenv(string variable);
返回值:函数getenv返回所给出的环境变量值;若出错,则返回false(0)。
Putenv
函数描述:putenv(string variable);
说明:函数putenv设置一个环境变量的值。
Getallheaders
函数描述:array getallheader();
返回值:函数getallheader返回在服务器和浏览器之间交换的所有头,其中有些将被转换为环境变量。
Setcookie
函数描述:int setcookie(string name,string value,int expire ,string path,string domain,int secure);
返回值:如果设置成功,返回true(1);否则返回false(0)。
Gethostbyaddr
函数描述:string gethostbyaddr(string ip_address);
返回值:函数gethostbyaddr返回由IP地址指定的主机名。
Gethostbyname
函数描述:string gethostbyname(string hostname);
返回值:函数gethostbyname返回由主机名hostname指定的主机的IP地址。
Gethostbynamel
函数描述:array Gethostbynamel(string 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_array和mysql_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)
注:strpos和strrpos都是不区分大小写的。
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没有,所以echo比print要快一些:
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将中日等汉字以及全角字符都当作两个或四个长度计算。好在mbstring或icon两个函数可以帮助解决这个问题,比如:
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()等函数。
与此相反的,implode和join则能把一个数组结合成一个字符串,他们是具有完全相同功能的函数。
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.gif比5.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 <font color="red">kiki</font>, 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。如果str是NULL,返回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被当作无符号数。 CONV以64位点精度工作。
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)。如果N是NULL,返回NULL。
mysql> select BIN(12);
-> ‘1100′
OCT(N)
返回八进制值N的一个字符串的表示,在此N是一个长整型数字,这等价于CONV(N,10,8)。如果N是NULL,返回NULL。
mysql> select OCT(12);
-> ‘14′
HEX(N)
返回十六进制值N一个字符串的表示,在此N是一个长整型(BIGINT)数字,这等价于CONV(N,10,16)。如果N是NULL,返回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填补直到str是len个字符长。
mysql> select LPAD(’hi’,4,’??’);
-> ‘??hi’
RPAD(str,len,padstr)
返回字符串str,右面用字符串padstr填补直到str是len个字符长。
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前缀或后缀被删除了。如果没有修饰符BOTH、LEADING或TRAILING给出,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,返回一个空字符串。如果str或count是NULL,返回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或大于参数个数,返回NULL。ELT()是FIELD()反运算。
mysql> select ELT(1, ‘ej’, ‘Heja’, ‘hej’, ‘foo’);
-> ‘ej’
mysql> select ELT(4, ‘ej’, ‘Heja’, ‘hej’, ‘foo’);
-> ‘foo’
FIELD(str,str1,str2,str3,…)
返回str在str1, str2, str3, …清单的索引。如果str没找到,返回0。FIELD()是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之中,返回一个1到N的值。一个字符串表是被“,”分隔的子串组成的一个字符串。如果第一个参数是一个常数字符串并且第二个参数是一种类型为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对应于位0,str2对应位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本来是为C和C++程序员写的。API说来说去,就是一种函数,他们包含在一个附加名为DLL的动态连接库文件中。用标准的定义来讲,API就是Windows的32位应用程序编程接口,是一系列很复杂的函数,消息和结构,它使编程人员可以用不同类型的编程语言编制出的运行在Windows95和Windows NT操作系统上的应用程序。可以说,如果你曾经学过VC,那么API对你来说不是什么问题。但是如果你没有学过VC,或者你对Windows95的结构体系不熟悉,那么可以说,学习API将是一件很辛苦的事情。
如果你打开WINDOWS的SYSTEM文件夹,你可以发现其中有很多附加名为DLL的文件。一个DLL中包含的API函数并不只是一个,数十个,甚至是数百个。我们能都掌握它嘛?回答是否定的∶不可能掌握。但实际上,我们真的没必要都掌握,只要重点掌握Windos系统本身自带的API函数就可以了。但,在其中还应当抛开掉同VB本身自有的函数重复的函数。如,VB
的etAttr命令可以获得文件属性,SetAttr可以设置文件属性。对API来讲也有对应的函数
GetFileAttributes和SetFileAttributes,性能都差不多。如此地一算,剩下来的也就5、600个。是的,也不少。但,我可以敢跟你说,只要你熟悉地掌握100个,那么你的编程水平比现在高出至少要两倍。尽管人们说VB和WINDOWS具有密切的关系,但我认为,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文件不在Windows或System文件夹中的时候,必须在函数中说明其出处(
路径)。如,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中的一样。但作为WIN32的API函数中,不存在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,但现在不大用了。一会儿用这个,一会儿用那个,各程序之间不能保持一致性了,起码看起来别扭。
结 构
结构是C和C++语言中的说法。在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传递的