1, PHP风格
这里为了显示代码把"<"和">"和key值以空格分开了,实际书写时切记不要将其分开:
(1) < ?php ? >: 这是XML风格的标记, 这里我们推荐使用此风格!
(2) < script language="php" < /script>: 这是脚本风格的标记
(3) < ? ?>: 这是简短风格的标记
(4) < % %>: 这是ASP风格的标记
提示:简短风格 和 ASP风格的标记,需要配置php.ini文件,分别将short_open_tag和asp_tags的开关打开
2, 注释
支持3种 = C注释格式*2 + SHELL注释格式*1:
单行注释(//),多行注释(/* */), SHELL单行注释(#)。
注意:单行注释不能出现"?>",多行注释不能嵌套操作。
3, 数据类型
支持8种原始类型=标量类型*4 + 复合类型*2 + 特殊类型*2
boolean, integer, float/double, string; array, object; source, null
这些变量类型通常不由programmer设定, 是PHP根据变量使用上下文在运行时决定的。
变量标识符要以"$"开头,声明和调用时都要带上"$"符。
(3.1) boolean
不是只有false值才为假的,在一些特殊情况下,boolean值也会被认为是false。像:
0, 0.0, "0", 空白字符串(""), 只声明没有赋值的数组等
(3.2)string
定义方式有3种=单引号(') + 双引号(") + 界定符(<<<)
界定符<=>双引号,而单引号与双引号是有区别的:
(3.2.1)双引号所包含的变量会自动被替换成实际数值,而单引号中包含的变量则按普通字符串输出。
(3.2.2)单引号只要对内部的单引号进行转义即可;而双引号则需要对更多的特殊字符进行转义才能正确显示,有
: \r, \n, \t, \\, \$, \', ", \[0-7]{1,3}, \[0-9A-Fa-f]{1,2}
(3.2.3)定义简单的字串时,使用单引号比较合适,如果使用双引号,PHP将花一些时间来处理字串的转义和变量的解析。 因此没有特别的要求,应该尽量使用单引号。
$fir_str="first_string"
echo "$fir_str" = first_string; echo '$fir_str' = $fir_str
(3.3)integer
定义:只能包含整数
表示范围:32位机中,[-2147483648-2147473647]
表示方式:十进制表示法,八进制表示法(0开头),十六进制(0x开头)
注意:遇到非法数字时,非法数字后面的数字会被忽略
赋值的数值溢出或者运算结果溢出时,溢出值会被当做float型处理, Dec(1234567890)=1234567890
hex(1234567890)=78187493520
Oct(1234567890)=342391
Oct(1234567)=342391
(3.4)float
定义:用来存储数字,也可以存储小数
范围:存储精度远大于整数,32位机下有效范围[1.7E-308, 1.7E+308]
表示格式:标准格式,科学记数法格式
注意:浮点型数值只表示了一种近似值,所以尽量避免浮点型数值之间进行等值比较,因为最后的结果往往是不准确的
函数格式:pi()=3.1415926535898
标准格式:3.14159265359=3.14159265359
科学记数法格式:314159265359E-11=3.14159265359
(3.5)array
定义:一组数据的集合,集合中的每个数据称为一个元素,元素包括索引(键名)和值两部分。
索引可以是数字,也可以是字串;
值可以是多种数据类型。
表示格式:$array=('value1', 'value2',......)
$array[key] = 'value'
$array = array(key1=>value1, key2=>value2,......)
注意:声明数组后,它的元素个数可以自由更改,只要给数组赋值,数组就会自动增加长度。 示例:
$arr1 = array('This', 'is', 'a', 'example');
$arr2 = array(0=>'php', 1=>'is', 'the'=>'the', 'str'=>'best');
$arr3[0] = 'tmp_name'
(3.6)object
有两种方法:面对过程和面对对象
(3.7)resource
resource(资源)是一种特殊变量,又叫做句柄,保存到外部资源的一个引用。资源是通过专门的函数来建立和使用的。
在使用资源时,系统会自动启用垃圾回收机制,释放不再使用的资源,避免内存消耗殆尽。因此资源很少需要手工释放。
(3.8) null
null(空值),特殊的值,顾名思义,表示没有为该变量设置任何值,唯一的值就是null。
null不区分大小写,null=NULL。其产生有3种情况:没有赋任何值,被赋值null,被unset()函数处理过的变量。
$str1= null; => str1 is null
$str2='str'; unset($str2); => str2 将不可用,或者即便使用它,也将为NULL值,且PHP会报NOTICE警告
(3.9), 类型转换
转换成boolean时,null, 0 和未赋值的变量或数组会被转换为false,其它的为真
转换成integer时,false转换为0,true转换为1,浮点型的小数部分会被舍去,字符型将截取到非数字位
,若不以数字开头将输出0
表示方式:1, (type)var
2,bool settype(mixed var, string type)
注意:两者区别是:使用类型操作符直接输出转换后的结果,原变量不会发生变化; 而使用settype()函数后,原变量会被修改
。 示例:
integer(314159265359E-11)=3
num=3.1415926r*r
(integer)num=3,now num=3.1415926r*r
settype($num, 'integer'): ohoh, $num is changed, but now num=3
4, 常量
获取方法:直接使用常量名;使用constant()函数;判断变量是否定义使用defined()函数,
使用方法:使用常量时,常量前面不带"$"符号,且不能放在""内,而使用defined判断常量是否存在时,需要加上""号
注意:
(1)常量VS变量区别
1.1),常量只能用define()函数定义,而不能通过赋值语句;建议不要以__开头,以便与预定义常量冲突引发结果异常。
1.2),常量可以定义大小写敏感还是不敏感,而变量永远是大小写敏感;
1.3),常量一旦定义就不能被重新定义或者取消定义,且常量的值只能是标量类型;变量不受此类限制;
1.4), 使用常量时,常量前面不带"$"符号,还有很多注意点,总之使用不方便,还容易混淆,效率也低
因为PHP处理常量的时候要进行多次查找;而使用变量时是要带"$"符号的;
1.4),常量可以不用理会变量的作用域,可以在任何地方定义和访问。
(2)常量有自身的特点,能少用就少用
2.1) PHP处理常量的方法过于宽松,所以会产生常量使用上的混淆,如果能够严格一些的话,是会避免很多问题的。 实际过程中,能使用变量就不要用常量。
2.2) 常量 (3)重赋值问题
虽然说不能重新定义,但再次赋值PHP也只会产生NOTICE错误,如果你定义之前,其它人也定义了同名常量,这将会产生无法预知的结果。
补救方法:使用常量之前要使用defined()来确认一下常量是否已经定义过。
示例:
define("MESG", "This is a msg");
MESG = This is a msg(OK).
$MESG = (NG).
defined("MESG") => 1(OK).
defined('MESG') => 1(OK).
defined($MESG) => (NG).
defined(MESG) => (NG).
isset(MESG) =>(NG).
当前文件名=D:\PHP\www\myTest\ch03.php,当前行数=150,PHP版本信息=5.4.22,当前操作系统=WINNT
6, 变量
定义:PHP4之前需要在使用前声明变量,PHP4之后只要在需要为变量赋值即可,使用前可以不用声明。
变量名称 = "$" + 标识符;
变量名大小写敏感;标识符以字母,数字,下划线组成;但不能以数字打头。
赋值:3种方式: 以"="号赋值;变量间赋值;引用赋值;
变量间赋值:赋值后两个变量使用各自的内存,互不干扰。
引用赋值:赋值后,两个变量名访问同一个变量内容,当改变其中一个变量的值时,另一个也跟着发生变化。用&符号来表示引用。
注意:PHP不需要声明变量,但使用时要给初始化值,否则会出现程序逻辑错误。变量声明和变量初始化是两码事。 6.1) 变量作用域
有3种情况:局部变量;全局变量;静态变量。
局部变量:在函数内部定义,作用域是所在函数;
全局变量:在函数外部定义,作用域是整个PHP文件,但在函数内部不可用,除非使用global关键字声明。
静态变量:使用static定义,能够在函数调用结束后仍保留变量值,当再次回到其作用域时,又可以继续使用原来的值。
提示:在函数变量,其作用域为所在函数;如果在函数外赋值,将被认为是完全不同的另一个变量。
6.2) 可变变量
定义:用一个变量的值作为另一个变量的名称。
$var1="var2",
$$var1="var3";
echo $var1. $var2;
第1个语句声明了变量var1,其内容为var2.
第2个语句声明了可变变量var2,其内容为var3. 这里$$var1可以理解成$($var1); 因此第3个语句就可以直接把var1的内容var2当成变量来使用了。
6.3)预定义变量(略)
PHP提供了很多非常实用的预定义变量,通过这些预定义变量可以获取到用户会话、用户操作系统的环境和本地操作系统的环境等信息,具体预定义变量可参照相关文档。
7,运算符
算法运算符:+ - * / % ++ -- ;
字串运算符:.(英文的句号);
赋值运算符:= += -= *= /= .= %= ;
位运算符: &(位与) |(位或) ~(位非) ^(位异或) <<(左移) >>(右移) ;
逻辑运算符:&&[and](逻辑与) ||[or](逻辑或) !(逻辑非) xor(逻辑异或) ;
比较运算符:>(大于) <(小于) ==(等于) !=(不等于) <=(大于等于) >=(小于等于) ===(恒等) !==(非恒等) ;
错误控制运算符:@ ;
三元运算符:?= ;
注意: 1)字串类:如果字串间使用"+"号,PHP会先把字串转换成数字,然后再做算术运算。
2)逻辑类:&&与and ||与or 有着不同的优先级
3)比较类:===表示不只是数值上相等,而且两者类型也一样。
7.2,运算符优先级和结合规则
不同优先级先高后低,相同优先级从左到右。也可以使用小括号,括号内运算最先进行。
pi = 3.1415926r*r; num = 1;
$pi.$num = 3.1415926r*r1; $pi+$num = 4.1415926
8, 函数
注意:
8.1) 参数传递
函数间参数传递有3种:按值传递,按引用传递,和默认参数。
按值传递:
将实参的值复制到形参中,函数内部针对形参进行操作,操作结果不会影响到实参。即函数返回后,实参的值不会改变。
按引用传递:形参前标注"&"表明是按引用传递,
就是将实参的内存地址传递到形参中,函数内部的所有操作都会影响到实参的值。函数返回后,实参的值会发生变化。
默认参数:
可以将某个参数设为可选参数,将可选参数放在参数列表末尾,并且指定默认值为空。
使用默认参数时,默认参数必须放在非默认参数的右侧,否则函数可能出错。从PHP5开始,默认值也可以通过引用传递。
8.2) 变量函数
8.3)对函数的引用
函数参数传递中有按引用传递的方式,可以修改实参的内容。引用可用于普通变量,函数参数,也可用于函数本身。对函数的引用,就是对函数返回结果的引用。
和参数传递不同,这里必须在两个地方使用"&"符号,用来说明返回的是一个引用。
8.4)取消引用
不再需要引用时,可以取消引用。取消引用使用unset()函数,它只是断开了变量名和变量值之间的绑定,而不是销毁变量值。
普通函数测试:
10 * 10 = 100
变量函数测试:
hello, I'm comming.
TOM has gone
I'm back, Lily
对函数的引用测试:
看到了
取消引用测试:
$num = 1234, $ref_num = 1234
unset($ref_num) => $num = 1234, $ref_num is unusable.
(unset)($ref_num) => $num = 1234,$ref_num = 1234