PHP
简述
首先了解PHP是什么,能用来干什么,到底有什么优势。PHP(Hypertext Preprocessor),超文本预处理器,是一种内嵌于HTML的服务端脚本语言(解释性语言,通常以文本形式保存,只有被调用时才能进行解释或编译),与JavaScript较为接近,支持表单处理和数据库访问。PHP主要用于动态网页的开发,功能强大,灵活实用,跟C和Java类似,容易上手,且PHP开源免费,学习成本低,支持多种数据库,能运行在各种平台上,几乎兼容所有服务器。
当服务器发现一个文档的扩展名为.php、.php3或者.phtml时说明该文档嵌入了PHP脚本,服务器就会调用PHP处理器来解释该脚本。PHP处理器有两种操作模式:复制模式——当PHP处理器在输入文件中遇到标记代码(可能包含嵌入的客户端脚本,如JavaScript或VbScript)时,就只将代码复制到输出文件中;解释模式——当输入文件中有PHP脚本时(含<?php和?>)必须对脚本进行解释,以HTML、XHTML形式发送到输出文件中。
PHP与JavaScript一样采用动态类型定义,即变量不声明类型,通过赋值来设置变量类型(如$a=1、$a=“fdsf”)。
PHP数组结合了一般编程语言数组和关联数组(一种具有特殊索引方式的数组,除整数外还可使用字符串或其它类型的值来索引,NULL不可)的特点,且有大量用于创建和处理PHP数组的函数( )。
PHP拥有庞大的函数库以便于灵活编程,支持过程编程和面向对象编程。
语法特征
PHP脚本(将PHP代码内嵌到文档中或引用外部文件)必须包含在标签<?php和?>之间。当脚本不在同一个文件时,可通过以文件名作为字符串参数的include结构将文件内容(包括标记语言、客户端代码及PHP代码等)复制到include所在的文件中,如include("test.inc");(.inc做后缀体现文件的作用,include file,相当于c++中的头文件,不影响文件实际类型)。若<?php和?>标签中出现关键字,解释器自动从解释模式切换到复制模式。
PHP的所有变量必须以$开头,变量名区分大小写,但保留字与函数名是不区分大小写的。
PHP插入注释的格式:单行注释用#或//,多行用/**/ 。
数据类型
PHP有四种标量类型——布尔型、整型、双精度型、字符串型,两种复合类型——数组和对象,两种特殊类型——资源类型resource和NULL。
▪布尔类型:true,false不区分大小写。布尔类型的上下文若为整型,则0的值为false,其他为true;若为字符串类型,则“0”或空字符串为false,其他为true;若为双精度,则0.0为false,其他为true。
▪整型:PHP中只有一个整数类型,即integer(与C中的long相同),多为32位。
▪双精度类型:可包含小数点和指数(指数格式为E或e),小数点前或后没有数字也合法,如.21或32.。
▪字符串类型:PHP不支持Unicode(国际组织制定的可以容纳所有文字和符号的字符编码方案),没有char类型,单个字符定义为长度为1的字符串。字符串可用单引号或双引号包起来表示,区别:转义字符在单引号中无特殊含义,在双引号中 则可识别(在转义字符前加反斜杠"\"可以使内容不被转换 )。
标量类型之间可通过隐式和显式方式转换。隐式方式即通过上下文强制转换,特别注意数值和字符串之间的转换:若字符串的第一个字符不是正负号或者数字时则转换失败,返回0;当字符串中含有句点或E、e时转成双精度,否则转成整数,数字后的非数字字符会被忽略;从双精度转换成整数不进行四舍五入。显式方式有三种:(类型)$变量;用intval、doubleval、strval(变量)将变量转化成整型、双精度型、字符串型;settype($变量,“类型”)。
▪NULL类型:未赋值的变量称为未绑定的变量,值为NULL,是NULL类型的唯一取值,若该变量用在表达式中则根据上下文强制转换成某类型的值。如:上下文是数字,则该变量由NULL转化为0;上下文是字符串则转换为空字符串。可通过“IsSet($变量)”测试某变量是否有值(有return true),已经有值的变量可通过unset函数设为未赋值状态。
运算符
▪算术运算符:加减乘都与其他语言一致,除法需特别注意:当两整数相除结果不为整数时得到的值为双精度类型的值。任何对整数的操作,在整数结果溢出时都会返回一个双精度值。PHP中包含大量用于数值计算的预定义函数, 如floor、ceil、round等。
▪字符串运算符:字符串运算只有连接运算符“.”,在字符串变量后加{i},则返回i位置上的字符。PHP中同样自带了很多字符串函数,如strlen、strcmp、strpossubstr等。
PHP数组
PHP数组是一般编程语言的数组和Ruby、Python等语言的关联数组和散列的结合。每个数组元素由键和值两部分组成,键可以是整数也可以是字符串,特别的是,同一个PHP数组中可以一部分元素的键是整数,一部分元素的键是字符串,且元素的数据类型可以不同。
▪数组创建:
(1)通过给变量直接赋值创建。若该变量已经存在,则该变量变为数组;若下标为空,则默认给出一个数字键(该数组当前最大数字键+1,若当前数组中无数字键则为0),如:
$list="ad";
$list[]="mk";//此时list变量变为数组,该元素下标为0
$list[]=5;//该元素下标为1
(2)使用array结构。array结构需要指定放在数组中的值,也可指定键或创建空数组。若不指定键,php解释器会从0开始提供数字键。array结构与list结构结合可一次为多个变量赋值
$t = array();//空数组
$t = array(1,2,5);//元素下标默认为0,1,2
$t = array(2 => 1,"mike" => 2,3 => 5);//键为2,mike,3一个数组中可以混用不同类型的键
$t = array(4,"12","jdj");
list($a,$b,$c) = $t;//$a,$b,$c的值分别为4,"12","jdj"
▪常用函数:
删除——unset($数组);//删除整个数组 unset($数组[键]);//删除某个元素
元素个数——sizeof($数组);
获取整个数组的键——arrays_keys($数组);
获取整个数组的值——arrays_values($数组);
确定某一元素是否寻在—— arrays_keys_exists(键,$数组);
字符串分割成数组——explode(“”,$字符串变量)//第一个参数为分割符,如“,”,空格等
数组连接成字符串——implode(“”,$数组)//第一个参数为连接符,如“,”,空格等
添加元素——array_push($数组, , ,…)//将后续参数添加到数组尾部
删除元素——array_pop($数组)//删除数组最后一个元素
匹配元素——in_array(表达式,$数组)//判断该表达式的值是否在数组中
……
▪数组访问:
通过键访问,如:$list[键]
通过指针访问:每个数组有一个内部指针,函数current($数组)返回当前指针指向的元素(数组创建时默认指向第一个 元素)。next($数组)指针后移一位,pre($数组),两者都是先移动当前指针再返回当前指针的值,each($数组) 则不同,先返回当前指针指向的元素(返回键为“key”和“value”的双元素数组)再移动指针。
▪数组排序:
字符串值排在数字前,字符串之间以首字母大小排序。
sort($数组)——按值排序(升序),按顺序用数字键替换原来的键。
asort($数组)——按值排序(升序),不改变原来的键。(多适用于散列)
ksort($数组)——按键排序(升序),不改变原来的键。
会话
▪cookie(网站为了辨别用户身份、进行session跟踪而存储在客户端上的记录数据):PHP可以方便的创建和使用cookie,setcookie(“cookie名”,“cookie值”,time()+秒)来创建cookie,所有cookie都存放在$_COOKIES数组中,可通过IsSet查找cookie是否存在。
▪session(在整个会话中一直存在,存储特定用户会话所需要的属性及配置信息):PHP中主要关注会话跟踪而不是会话ID,每次会话通过session_start()创建ID,会话变量及值存储在$_SESSION数组中,可通过IsSet查找变量是否存在。
PS:PHP功能强大,一些相对C++,Java等一般语言来说不太规范的形式也可以用,怕会搞混,所以诸如print()能省括号这种还是不要省了,尽量按一般语言形式写。