PHP语法基础
上一篇 / 下一篇 2007-02-13 15:59:34 / 个人分类:他山之石
一,概述
二,PHP脚本标记
Q \`2r@)l0
1、 PHP脚本有四种标记: 短标签和asp标签虽方便但移植性及发行性较差,通常不推荐。此外注意如果将 PHP 嵌入到 XML 或 XHTML 中则需要使用标准标签 <?php ?> 以保持符合标准。
9t8gy$QCj0kw*w K&M#dT@0
A, 标准标签:<?php .. ?>木铎校园 BBS 社区c.B6]"mj U
n2@6a^/O&Gg0
B, 脚本标签:<scrīpt language=”php”>...</scrīpt>
:{,x"P#F%XQv0PG7\0木铎校园 BBS 社区W'|9fEo'_UD
C, 短标签:<? ... ?> 需要在php.ini中设置short _open_tag=on,默认是on,或者在 PHP 编译时加入了 --enable-short-tags 选项。(PHP 3版本还可以通过 short_tags() 函数激活使用短标记。)木铎校园 BBS 社区"A*f!n5|*gQ3c/yi&_U
木铎校园 BBS 社区4}!kR#W4oYC
D, asp标签(PHP 3.0.4 版后支持): <% ... %>需要在php.ini中设置asp_tags=on,默认是off
4K9i0OF3M?0s]x#s(Je*lhdC0
2, 指令分隔符: 同 C,java 或 Perl 一样,PHP 需要在每个语句除末行(因为结束标记隐含表示了一个分号 )后用分号结束指令。而文件末行省略分号有利于使用输出缓冲和 include() 或者 require()木铎校园 BBS 社区d7Pl+[,K"N9w1F
木铎校园 BBS 社区^w@2F q
3, 注释: PHP 支持 C,C++ 和 Unix Shell 风格(Perl 风格)的注释。例如:木铎校园 BBS 社区+r;beRi|^
单行注释:// ,#
多行注释:/* */
<?php
echo "This is a test"; // 单行注释 (c++ 风格),
/* 多行注释:单行注释说明1:"// ?>"中 ?>有效,
单行注释说明2:"// </scrīpt>"中 </scrīpt>无效 */
echo "This is yet another test";
echo "One Final Test"; # 单行注释 (shell风格)
?>nYXCj`XQ)C9u0
三,PHP数据类型
木铎校园 BBS 社区G6B+eZOr?S
1, 基本数据类型:Integer,Double,String,Boolean,Object(对象或类),Array(数组)木铎校园 BBS 社区F&wjY:v
)N_1e;`1zV0
A, 四种标量类型:
D O]6zS R0木铎校园 BBS 社区t3KpP O!?L)j"}
(1), boolean(布尔型) :布尔值 FALSE情况是:整型0,浮点0.0,空白字符串和字符串 "0",没有成员变量的数组,没有单元的对象(仅适用于 PHP 4),特殊类型 NULL(包括尚未设定的变量)。其它值都被认为是 TRUE(包括任何资源)木铎校园 BBS 社区)h.]%dqvV0H
:F-_4y;h7z0
(2), integer(整型):八进制前缀0,十六进制前缀0x,如果向八进制数如01090传递了一个非法数字(即 8 或 9),则后面其余数字会被忽略,等于010。
%{*}X6W ce j0E5g04i7iyZ jMf0
(3), float(浮点型,也作double,浮点数,双精度数或实数):浮点数精度是不准确的
?LKzct5H0木铎校园 BBS 社区Z8j8p jtw m:CXfO
(4), string(字符串):
dRJ J'V"F}:GeR0w,YU.Op1m+nu#`0
B, 两种复合类型:
,G1G p%| _ S%d0木铎校园 BBS 社区+Y%p'qd)L
(1), array(数组) :PHP 中的数组实际上是把一个优化过的有序图类型当成数组来使用。应该始终在用字符串(除常量或变量)表示的数组索引上加上引号。
?yurk%z^o.M0r7WO|,k-S0
定义 array():木铎校园 BBS 社区 y]gW#Ap
array( [key =>] // key 可以是 integer 或者 string
value // value 可以是任何值
, ...
)
<?php
$arr = array("foo" => "bar", 12 => true); //key如果是浮点数则取整为integer
echo $arr["foo"]; // bar
echo $arr[12]; // 1
?>缺省的键名取当前最大的整数索引值,而新的键名索引为当前最大索引加一。如果指定的键名已经有了值,则该值会被覆盖。 自 PHP 4.3.0 起,上述的索引生成方法改变了。如今如果给一个当前最大键名是负值的数组添加一个新值,则新生成的的索引将为零(0)。以前新生成的索引为当前最大索引加一,和正值的索引相同。木铎校园 BBS 社区SQ#KK nv d!C;B
木铎校园 BBS 社区m)G*Y jTN0a2|L
添加/修改数组元素:木铎校园 BBS 社区%H1e xrXq*V5Mu
<?php
$arr = array(5 => 1, 12 => 2);
$arr[] = 56; // This is the same as $arr[13] = 56;
// at this point of the scrīpt
$arr["x"] = 42; // This adds a new element to
// the array with key "x"
unset($arr[5]); // This removes the element from the array
unset($arr); // This deletes the whole array
?>(2), object(对象)木铎校园 BBS 社区)X"Qs0`{?;tb|
木铎校园 BBS 社区].Z"}"oz'r:`"EFM
对象初始化:要初始化一个对象,用 new 语句将对象实例到一个变量中。木铎校园 BBS 社区"rOB8yc#P
<?php
class foo
{
function do_foo()
{
echo "Doing foo.";
}
}
$bar = new foo;
$bar->do_foo();
?>"@f'YFc9^%U`| E0
转换为对象:如果将一个对象转换成对象,它将不会有任何变化。如果其它任何类型的值被转换成对象,内置类 stdClass 的一个实例将被建立。如果该值为 NULL,则新的实例为空。对于任何其它的值,名为 scalar 的成员变量将包含该值。木铎校园 BBS 社区g{d/e+I!D{
<?php $obj = (object) 'ciao'; echo $obj->scalar; // outputs 'ciao' ?>
木铎校园 BBS 社区@2}Z4pZDy [
C, 特殊数据类型:
Yj;eu5`0木铎校园 BBS 社区:b~!E%CrL
(1), Resourse(对第三方资源(如数据库)的引用,PHP 4 引进):资源是一种特殊变量,保存了到外部资源的一个引用。资源是通过专门的函数来建立和使用的。木铎校园 BBS 社区:|mL.E/N'H|@
木铎校园 BBS 社区IE6\a x-x
禁止类型转换为资源:由于资源类型变量保存有为打开文件、数据库连接、图形画布区域等的特殊句柄,因此无法将其它类型的值转换为资源。
*pgmq;]nc0木铎校园 BBS 社区Bm$r_z9Hs
释放资源:由于 PHP4 Zend 引擎引进了资源计数系统,可以自动检测到一个资源不再被引用了(和 Java 一样)。这种情况下此资源使用的所有外部资源都(除了持久数据库连接)会被垃圾回收系统释放。由此原因,很少需要用某些 free-result 函数来手工释放内存。木铎校园 BBS 社区:xC is\9fh7AG q8H
S&Y(}4z7E(q-[0
dg-ORkX [0
(2), Null(空,未初始化的变量,PHP4引进):特殊的 NULL 值表示一个变量没有值。NULL 类型唯一可能的值就是 NULL。 在下列情况下一个变量被认为是 NULL:被赋值为 NULL,尚未被赋值, 被 unset()。
$j v_[s2cN0L'Y0木铎校园 BBS 社区!U\3P9CO8EQp
语法:NULL 类型只有一个值,就是大小写敏感的关键字 NULL。木铎校园 BBS 社区jh;u"}H.El4u`^$k"`
<?php $var = NULL; ?>
!w[;k3k*cd0
D, 伪类型:
*]7V0r-R l*t%_0木铎校园 BBS 社区^]oI(Y
(1), mixed :mixed 说明一个参数可以接受多种不同的(但并不必须是所有的)类型。木铎校园 BBS 社区.wx;w(i x1o&x
木铎校园 BBS 社区-V1u ~Bn"T1n:V\q
(2), number :number 说明一个参数可以是 integer 或者 float。木铎校园 BBS 社区LI|qxIE$r+~y
木铎校园 BBS 社区 o A"foGSH4nl
(3), callback :有些诸如 call_user_function() 或 usort() 的函数接受用户自定义的函数作为一个参数。Callback 函数不仅可以是一个简单的函数,它还可以是一个对象的方法,包括静态类的方法。 一个 PHP 函数用函数名字符串来传递。可以传递任何内置的或者用户自定义的函数,除了 array(),echo(),empty(),eval(),exit(),isset(),list(),print() 和 unset()。
"JC6V\7Q"RSm3B.H01` h)c` AmY0
一个对象的方法以数组的形式来传递,数组的下标 0 指明对象名,下标 1 指明方法名。
hW!A-W$E0木铎校园 BBS 社区V)~'A7Y7U0FnXA
对于没有实例化为对象的静态类,要传递其方法,将数组 0 下标指明的对象名换成该类的名称即可。木铎校园 BBS 社区V;dy1` Zx _&x
8PgddX9G&phF-|;T0
木铎校园 BBS 社区)~-I9iY#e3L5Cog
2, 字符串可以用三种字面上的方法定义。
$~2G8t H~8pA}0木铎校园 BBS 社区r2OA$mk7Xc
(1), 单引号: 除可转义(')和字符串末的(\),其中出现的变量和转义序列不会被其对应的值替代。木铎校园 BBS 社区M ]^F"s$c
<?php // 输出结果: Arnold once said: "I'll be back \" echo 'Arnold once said: "I\'ll be back \\"';//转义表示(')和字符串末的(\)用(\)转义 // 两个输出结果一样: You deleted C:\*.*? echo 'You deleted C:\\*.*?';//可转义(\)本身,但不必要 echo 'You deleted C:\*.*?'; //因为试图转义除(')和字符串末的(\)之外字符都会连带转义(\) // 输出结果: This will not expand: \n a newline, Variables do not $expand $either echo 'This will not expand: \n a newline, Variables do not $expand $either'; //单引号变量和转义序列不会生效。 ?>
木铎校园 BBS 社区$dL Pz3d#}+R&H?0@|
(2), 双引号 :其中出现的变量和转义序列会被解析生效。木铎校园 BBS 社区GG[-W4G
P I}E I0L:w4e0
序列木铎校园 BBS 社区I(f| k#V4h*B+v} | 含义 B;NM W,ZCJ0 |
\n木铎校园 BBS 社区ACO8BG&TD | 换行(LF 或 ASCII 字符 0x0A(10))木铎校园 BBS 社区j[)A-b8u+n H(N7X |
\r木铎校园 BBS 社区f,Qm(k.q"\ | 回车(CR 或 ASCII 字符 0x0D(13))木铎校园 BBS 社区Nvu&{Yg |
\t木铎校园 BBS 社区0D+LIEN1JEb | 水平制表符(HT 或 ASCII 字符 0x09(9))木铎校园 BBS 社区qX)OFjR%jihj$d |
\\木铎校园 BBS 社区:r(Gz.{/x{ | 反斜线 3OQ)Xh-VtA0 |
\$ /B'Y_-xUZSg0 | 美元符号木铎校园 BBS 社区.KZz Zq"]G |
\" m#W7ipmRe0 | 双引号 &zI*@%A}M0 |
\[0-7]{1,3}木铎校园 BBS 社区1Q\)rc$V"o(Z4Xb]{6G | 此正则表达式序列匹配一个用八进制符号表示的字符木铎校园 BBS 社区"Z B\ h!hA$w0F+l |
\x[0-9A-Fa-f]{1,2} v2LJ4c5@0 | 此正则表达式序列匹配一个用十六进制符号表示的字符木铎校园 BBS 社区J2z!\J5t[ |
木铎校园 BBS 社区D#Wk.^.~
此外,如果试图转义任何其它字符,反斜线本身也会被显示出来!木铎校园 BBS 社区#_(J*e/q:M3de;m
#sM*nI mW"f|3}0
(3), 定界符(PHP4开始支持): 格式严格干净。结束标识符格式严格,前面必须只有上段换行符(\x41 ,\r),后面只有分号和换行符。不能用定界符语法初始化类成员。必须用其它字符串语法替代。其中出现的变量和转义序列会被解析生效。而且其中可以省略转义引号。
r!f"h3U)g0<?php $str = <<<EOD //标识符(必须遵循 PHP 中标签的命名规则) Example of string spanning multiple lines using heredoc syntax. EOD; //结束标识符格式必须干净
ALw_(sA0
3, 类型转换:PHP 在变量定义中不需要(或不支持)明示的类型定义;变量类型是根据使用该变量的上下文所决定的。
