《php+ajax完全自学手册》
1.php中数据类型有整型、浮点型、字符型、布尔型以及两个特殊的类型对象和数组。
2.php代码中echo作为输出语句,“.”作为连接符
Eg: <?php
Echo “当前php版本为”.PHP_VERSION;
?>
3.php中常量分为预定义常量和自定义常量,预定义常量是PHP系统事先定义的,可以直接使用,快速获取相关内容,提高工作效率。
get_defined_constants()函数可以获取系统中所有的预定义常量,eg:PHP_VERSION,PHP_OS,PHP_SAPI,PHP_INT_MAX,PHP_INT_SIZE,DEFAULT_INCLUDE_PATH,__LINE__,__FILE__,__FUNCTION__,__CLASS__,__METHOD__.
4.自定义常量需要通过使用define()函数来实现对常量的定义。Eg:define(“year”,”2007”);常量对大小写敏感,被定义之后不能取消定义吗,也不能改变定义的值。常量只能是字符型、整型、浮点型和布尔型这4种类型。
5.变量值可以改变,也分为预定义变量和自定义变量。变量包含所有的6种类型。
常用预定义变量如下图:
自定义变量:$var=100;是用一个美元符号加变量名,变量大小写不敏感。
Php对变量赋值有两种方式,一种是传值赋值,就是把表达式的值直接赋给变量,如$var = “php”;还有是引用赋值,如$var1 = &$var;这种方式将两个变量值联系在一起,改变新变量的值就改变原始变量的值。使用引用变量时,只有有名字的变量才能进行引用赋值,如果将一个表达式或者函数用引用赋值的方式赋值给变量会出错。Php中统一使用字符型变量来定义单独的字符或字符串。
Php中可通过settype(mixed var,string type)来对变量进行强制类型转化,将名称为var的变量转化成type类型。type可以是boolean,integer,float,string,array,object,null.
成功则返回true,反之false。Eg:$var = 1;settype(var,string);
6.变量的作用域:分为全局变量和局部变量,全局变量指在程序运行期间都能使用的变量,局部变量则只有在当前函数或过程中有效。
全局变量系统会在内存中保留一块全局变量的区域,区分大小写,可以通过$GLOBALS[“变量名”]调用。
7.数组变量:定义数组的两种方法:一是直接给数据每个元素赋值,如$arr[“key”] = value;或者对array()函数定义一个数组,如$arr = array(11,12,”a”=>”hello”);数组键为字符时需要在键上加引号,数字则不需要。一个数组中的元素类型可以不同。print_r()为输出函数,print_r($arr);
获取数组元素:$arr[key];直接采用$array[key]=value的方式可以动态为数组添加元素。不给出键的话系统会自动为未给出键的元素赋数字键。多维数组,可以用$arr[a][0]=”a0”;$arr[a][1]=”a1”;$arr[b][0]...的方式,也可以$arr = array(“a”=>array(1,2),”b”=>array(3,4));的方式。
8.运算符与表达式:
算术运算符包括加减乘除,求余和取反。除号总是返回浮点数,即使是两个整数。求余在$a%$b的$a为负数时结果为负。赋值运算符=。$b.= “world”;表示的是$b=$b.”world”;位运算符包括&,|,^,~,<<,>>。比较运算符包括==,===(全等,值和类型都相同),!=,<>(等价于!=),!==(不全等),<,>,<=,>=。数值与字符比较时总是数值大于字符;字符与字符比较时,按照ASCII码后面的大于前面。数组大于数值。三木运算符?: 。错误控制运算符@,把这个运算符放在一个PHP表达式之前,该表达式产生的任何错误信息都会被忽略掉。它只对表达式有效,可以放在变量、函数和include()调用、常量之前,不能放在函数或类的定义之前,也不能用于if,for和each的条件结构之前。执行运算符`,执行操作系统命令,效果与shell_exec()相同。该运算符在安全模式或者关闭了shell_exec()时是无效的。递增递减运算符++,--可以用于字母,但是只能递增,只支持纯字母(a~z和A~Z)。逻辑运算符and(&&),or(||),xor,!。字符串运算符为.用于把多个字符串连接起来。数组运算符+(联合,把右边的数组加到左边数组的后面,重复的键值不会被覆盖,只是加入了原数组中没有的键值对),==,===,!=,<>,!==。比较两个数组是否相等时只要求有相同的键值,全等则要求顺序也相同。类型运算符用于类与对象操作的,instanceof,判断对象与类的关系。
9.流程控制:用户使用if...else或者switch case多重判断时为了加快程序的执行效率,最好把出现机率高德判断条件放在前面。
10.php中的函数:
自定义函数:
function【关键字】 functionname(varname){return XX;}
系统函数:包括作为系统内核的系统函数和扩展模块库函数,系统内核函数可直接使用,扩展模型需要在PHP中加载类扩展才能正常使用,如MYSQL库函数。
函数的特殊定义:有条件定义与嵌套定义
有条件定义:在判断中使用函数定义,只有当判断条件为真时,函数定义过程才被执行,否则函数不能被定义更不能被调用。
Eg: 只有$var大于10时,函数f_1()才被定义,下面的程序会导致错误。
<?php
f_1();
$var = 5;
if($var>10)
{
function f_1()
{
echo “defined!”;
}
}
?>
嵌套定义:在一个函数的内部定义另一个函数,如果外层函数没有被执行,内层函数的定义过程也不会被执行;只有外层函数被执行了,内层函数才会被定义。
Eg:
<?php
f_1(); //不调用f_2()不能被定义
f_2();
function f_2()
{
function f_1()
{
echo “defined!”;
}
}
?>
11.php中的数据处理:
abs(mixed var);
ceil,floor,round都用于取整,但是其中ceil采用进一法取整,返回不小于参数的下一个整数;floor用舍去法,返回不大于参数的下一个整数;round用四舍五入法。
float deg2rad(float number);//将角度转化成弧度值
sin,cos,tan,asin,acos,atan函数,参数是弧度值。
mixed max/min(number arg1,number arg2..);
mixed max/min(array a1,number arg1,array a2..); //可以将数组与数值比较,也可以数组与数组比较,比较个数无限。该函数会把非数值的字符串当成0,但如果这个是最大的数值那么会返回字符串。如果多个参数都为0且都是最大值,那么返回其中数值的0。若没有数值0,则返回字母表顺序最大的字符串。
int rand([int min,int max]);产生位于min与max之间的随机数,如果没有给参数,则返回0到RAND_MAX间的随机数。
进制转换函数:
计算指数函数float exp(float arg);返回e指定次方的值。e为2.718282。
float hypot(float x,float y);//求直角三角形斜边长度
bool is_finite(float val); //判断val是否是有限值
bool is_infinite(float val);
bool is_nan(float val); //判断是否是合法数值
float pi();//等价于M_PI
12.字符串的处理:
字符串输出函数列表
strlen()获取长度,该函数不能统计中文,会得不到正确的结果。中文用mb_strlen函数。
string substr(string string,int start[,int length])是截取字符串的函数,start为开始位置,截取length长度的。没有length则到原始串末尾。如果start为负数,那么从字符串尾部开始。length为负时,表示取倒数第length个字符。中文用mb_substr().
string strtr(string str,string from,string to);
string strtr(string str,array replace_pairs);
把str中的所有from转化成to,或者把str按照replace_pairs里面的key value方式来转换。如果from和to的长度不同,那么将以较短的那个参数的长度为准,并把长的转换成短的长度的参数。
mixed substr_replace(mixed string,string replacement,int start[,int length]);将string中的start,length的部分替换成replacement。
array explode(string separator,string string[,int limit]);字符串分割函数,将string按照separator进行分割,limit为最多返回数组元素的数量。
int strcasecmp(string str1,string str2);不区分大小写比较两个字符串,str1大于str2返回1.
int strnatcmp(string str1,string str2);区分大小写比较字符串。
string strtolower(string string);//string全部转换成小写
string strtoupper(string string);//转换成大写
string ucfirst(string string); //将第一个字母转换成大写
string ucwords(string string); //将字符串中的每一个单词的第一个字母转换成大写
string chr(int ascii);//将ascii转换成对应的字符
int ord(string str);//返回一个字符对应的ascii码
string join(string glue,array pieces);//将pieces中的内容按照glue分割连成字符串
string htmlspecialchars(string string[,int quote_style[,string charset]]); //将string中的html的原始符号转化。该函数可以有效地除去从网上搜集的文本内容的html格式。
string strrev(string string);//对字符串的内容进行颠倒
int substr_count(string haystack,string needle[,int offset[,int length]])//在haystack中查找needle出现的次数,offset是查找偏移量,length是查找长度。
int strripos(string haystack,string needle[,int offset]); //查找一个字符串needle在另一个字符串haystack中首次出现的位置。
string md5(string str[,bool raw_output]); //对strMD5加密
13.数组处理
int count(array array[,int mode]);//计算数组长度,mode为1时函数递归对数组计数
array array_keys(array input[,mixed search_value[,bool strict]]);//返回input的键值
array array_flip(array trans);//交换trans的键值对
数据排序函数
用rsort和sort函数时,对数组排序的同时,将原有的字符键值改换成了数值键值会导致数组结构的丢失。
bool usort(array &array,callback cmp_function);//用户自定义排序函数,类似于C++泛型算法,用户自己定义排序比较函数cmp_function.
数组指针函数
array array_unique(array array);//移去数组中重复的值
array array_merge(array array1[,array array2[,....]]);//将多个数组合并成一个数组,当有相同的字符键值时,后面的覆盖前面。当是数值键值时添加到后面。
bool in_array(mixed needle,array haystack[,bool strict]);//判断haystack中是否有needle。
array array_count_values(array input);//统计所有值出现的次数,返回结果数组
14.目录与文件
bool mkdir(string pathname[,int mode[,bool recursive[,resource context]]]);//创建目录
bool rmdir(string dirname);//删除目录,与linux一样必须是空目录
使用目录时,先要用opendir打开目录句柄。
resource opendir(string path[,resource context]);
string readdir(resource dir_handle); //读取目录,返回目录中下一个文件的文件名
Array scandir(string directory[,int sorting_order[,resource context]);//返回directory指定目录的全部目录与文件内容。该函数不用事先打开目录,所有不用opendir函数,只需要目录名即可。
目录句柄被readdir操作之后会改变,可以用void rewinddir(resource dir_name);重置到目录的开头。
关闭目录void closedir(resource dir_name);
float disk_total_space(string diractory);//返回目录所在磁盘分区的大小
float disk_free_space(string diractory);//获取特定目录所在物理磁盘的可用大小
bool file_exists(string filename);//判断文件是否存在
resource fopen(string filename,string mode[,bool use_include_path[,resource zcontext]]); //打开文件获取文件句柄
文件打开模式
string fgetc(resource handle); //按字符读取文件内容
string fgets(int handle[,int length]);//按行读取文件
array file(string filename[,int use_include_path[,resource context]]);//不需要获取文件句柄,直接将文件所有内容读到数组变量中
string file_get_contents(string filename[,bool use_include_path[,resource context,[int offset[,int maxlen]]]]);//与file一样,但是结果返回到string中
int fwrite(resource handle,string string[,int length]); //将string写入到handle句柄的文件中
Bool rewind(rescource handle);//倒回文件的指针
Bool copy(string source,string dest);//把source复制到dest
Bool rename(string oldname,string newname[,resource context]);//重命名文件
Bool unlink(string filename);//删除文件
$_FILES包含用户上传文件的所有信息:
bool move_upload_file(string filename,string dest);//将用户上传的文件移动到dest位置
15.获取客户端服务器信息
预定义变量$_SERVER[“HTTP_USER_AGENT”]可以获取客户端的各项信息,包括浏览器信息,客户端操作系统信息等,也可以通过mixed get_browser([string user_agent[,bool return_array]]);//获取客户端浏览器类型
$_SERVER[“REMOTE_ADDR”]包含客户端的IP地址
bool phpinfo([int what]); //获取服务器所有信息
int time();//获取当前时间
string date(string format[,int timestamp]); //格式化返回一个指定日期
bool checkdate(int month,int day,int year);//检查指定日期是否合法
16.session和cookie
两者的区别:session是用户在浏览某网站时到关闭浏览器中维持的这段时间,用户的信息存储在服务器上。它的解决方案就是在php中定义全局变量,使得在一个session中的所有php脚本都有效。Cookie是存储在客户端,它记录了用户的id、密码浏览记录以及停留时间等信息。两者都是会话处理机制,用来储存私密信息,都有有效期的概念。但是cookie安全性较低。
session的使用:
在使用session之前都要先用bool session_start()函数,bool session_register(mixed name[,mixed..])注册session。session_unregister()可以取消session变量。bool session_destroy()关闭session相关的函数。$_SESSION[“sessionname”]可以用来获取和设置session值。当使用session_register()时,使用bool session_is_registered(string name);判断变量是否已经被注册。使用$_SESSION时,用bool isset()来判断变量是否定义,unset()来实现注销。String session_save_path([string path]);返回session的保存路径。
cookie的使用:
bool setcookie(string name[,string value[]]]]]);//定义cookie
$_COOKIE来使用已经注册的cookie。在setcookie的时候可以在参数中设置cookie的生命周期。
17.类与对象
定义类用关键字class,为类定义属性用var关键字,方法用function关键字。调用类的属性与方法时需要使用符号“->”,属性名不再要“$”,因为对象变量前面会有一个$,php变量只允许一个美元符号。
类的继承:
class A{}
class B extends A{}
在子类中想要访问父类中的方法用parent::方法名(参数)。通过函数会重载。
一个类想要调用另一个类的属性和方法可以用类名::方法名或者属性名即可。
bool class_exists(string class_name[,bool autoload]); //判断类是否定义
array get_class_methods(string class_name);//返回类的方法名
array get_class_vars(string class_name);//返回类的属性
string get_class(object obj);//返回obj的所属类
bool is_a(object object,string class_name);//判断object是否是该类或者该类是该对象的父类则返回true。
bool method_exists(object object,string method_name);//检查方法是否存在在对象中
bool property_exists(mixed class,string property);//检查属性是否存在在类中
18.php的mysql操作
数据库连接函数mysql_connect返回一个句柄,mysql_close关闭数据库。
mysql_list_dbs返回当前可用的数据库信息,这个信息要通过mysql_fetch_array(),mysql_fetch_row(),mysql_num_rows()分条获取。mysql_query(string query[,resource link_identifier)用于具体执行数据库操作的函数,包括插入删除查询更新、创建数据库、表等。mysql_list_tables返回所有的数据表名。