






















http://www.php.net/manual/zh/index.php
基本语法
PHP 标记
可以在 PHP 中使用四对不同的开始和结束标记。其中两种,<?php ?> 和 <script language="php"> </script> 总是可用的。另两种是短标记和 ASP 风格标记,可以在 php.ini配置文件中打开或关闭。尽管有些人觉得短标记和 ASP 风格标记很方便,但移植性较差,通常不推荐使用。
此外注意如果将 PHP 嵌入到 XML 或 XHTML 中则需要使用 <?php ?> 标记以保持符合标准。
如果文件内容是纯 PHP 代码,最好在文件末尾删除 PHP 结束标记。这可以避免在 PHP 结束标记之后万一意外加入了空格或者换行符,会导致 PHP 开始输出这些空白
从 HTML 中分离
要输出大段文本时,跳出 PHP 解析模式通常比将文本通过 echo 或 print 输出更有效率。
指令分隔符
同 C 或 Perl 一样,PHP 需要在每个语句后用分号结束指令。在一个 PHP 代码段中的最后一行可以不用分号结束。
注释
PHP 支持 C,C++ 和 Unix Shell 风格(Perl 风格)的注释。
//或 #
/*…*/
类型
简介
PHP 支持 8 种原始数据类型。
四种标量类型:
两种复合类型:
最后是两种特殊类型:
为了确保代码的易读性,本手册还介绍了一些伪类型:
以及伪变量 $...。
变量的类型通常不是由程序员设定的,确切地说,是由 PHP 根据该变量使用的上下文在运行时决定的。
Note: 如果想查看某个表达式的值和类型,用 var_dump() 函数。
array(4) {
["username"]=>
string(23) "test:Chicago Unit Tests"
["password"]=>
string(32) "bf289be8c8015b91db4b3e3e021e88ad"
["wsdl"]=>
string(33) "config/OmnitureAdminServices.wsdl"
["rsid"]=>
string(17) "chicago-unit-test"
}
类型函数:
Boolean 布尔类型
TRUE 或 FALSE。两个都不区分大小写。
当转换为 boolean 时,以下值被认为是 FALSE:
FALSE 本身所有其它值都被认为是 TRUE(包括任何资源)。
Integer 整型
八进制表达,数字前必须加上 0(零)。要使用十六进制表达,数字前必须加上 0x。要使用二进制表达,数字前必须加上 0b。
要明确地将一个值转换为 integer,用 (int) 或 (integer) 强制转换。不过大多数情况下都不需要强制转换,因为当运算符,函数或流程控制需要一个 integer 参数时,值会自动转换。还可以通过函数 intval() 来将一个值转换成整型。
FALSE 将产生出 0(零),TRUE 将产生出 1(壹)。
当从浮点数转换成整数时,将向下取整。
如果浮点数超出了整数范围(32 位平台下通常为 +/- 2.15e+9 = 2^31,64 位平台下通常为 +/- 9.22e+18 = 2^63),则结果为未定义
Warning: 决不要将未知的分数强制转换为 integer,这样有时会导致不可预料的结果。echo (int) ( (0.1+0.7) * 10 ); // 显示 7!
Float 浮点型
浮点数的形式表示:
LNUM [0-9]+
DNUM ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
EXPONENT_DNUM [+-]?(({LNUM} | {DNUM}) [eE][+-]? {LNUM})
NaN
某些数学运算会产生一个由常量 NAN所代表的结果。此结果代表着一个在浮点数运算中未定义或不可表述的值。任何拿此值与其它任何值进行的松散或严格比较的结果都是 FALSE。由于 NAN 代表着任何不同值,不应拿 NAN 去和其它值进行比较,包括其自身,应该用 is_nan() 来检查。
String 字符串
一个字符串 string 就是由一系列的字符组成,其中每个字符等同于一个字节。PHP 只能支持 256 的字符集,因此不支持 Unicode 。
Note: string 最大可以达到 2GB。
一个字符串可以用 4 种方式表达:
可以把 string当成字符组成的 array。比如 $str[42]or$str{42}。
字符串可以用 '.'(点)运算符连接起来,注意 '+'(加号)运算符没有这个功能
字符串会被按照该脚本文件相同的编码方式来编码。
Array 数组
可以用 array() 语言结构来新建一个数组。它接受任意数量用逗号分隔的 键(key) => 值(value)对。自 5.4 起可以使用短数组定义语法,用 [] 替代 array()。
array( key => value
, ...
)
// 键(key)可是是一个整数 integer 或字符串 string
// 值(value)可以是任意类型的值
key 会有如下的强制转换:
多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了。
Object 对象
Resource 资源类型
资源 resource是一种特殊变量,保存了到外部资源的一个引用。资源是通过专门的函数来建立和使用的。
伪类型与变量
mixed 说明一个参数可以接受多种不同的(但不一定是所有的)类型。
number 说明一个参数可以是 integer 或者 float。
在函数原型中,$... 表示等等的意思。当一个函数可以接受任意个参数时使用此变量名。
变量
基础
美元符号后面跟变量名,变量名是区分大小写
Note: $this 是一个特殊的变量,它不能被赋值。
给变量赋值方式
预定义变量
变量范围
大部分的 PHP 变量只有一个单独的范围。这个单独的范围跨度同样包含了 include 和 require 引入的文件。
任何用于函数内部的变量按缺省情况将被限制在局部函数范围内。
在 C 语言中,全局变量在函数中自动生效,除非被局部变量覆盖。PHP 中全局变量在函数中使用时必须声明为 global。在全局范围内访问变量的第二个办法,是用特殊的 PHP 自定义 $GLOBALS 数组。$GLOBALS是一个关联数组.
静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。static $a = 0;
可变变量
一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。两个美元符号($)
$a = 'hello';
$$a = 'world';
echo "$a ${$a}";
两个变量都被定义了:$a 的内容是“hello”并且 $hello 的内容是“world”。
可变变量用于数组: ${$a[1]} vs. ${$a}[1]
类的属性也可以通过可变属性名来访问
注意,在 PHP 的函数和类的方法中,超全局变量不能用作可变变量。$this 变量也是一个特殊变量,不能被动态引用。
Name: <input type="text" name="username"><br />
echo $_POST['username'];
echo $HTTP_POST_VARS['username'];
echo $username;// register_globals = on
Note:
PHP 也懂得表单变量上下文中的数组
PHP 透明地支持 » RFC 6265定义中的 HTTP cookies。
<?php
setcookie("MyCookie[foo]", 'Testing 1', time()+3600);
注意: PHP 将会自动将变量名中的点替换成下划线。//$varname.ext; /* 非法变量名 */
常量默认为大小写敏感。传统上常量标识符总是大写的。
常量和变量有如下不同:
Note: 常量和(全局)变量在不同的名字空间中。这意味着例如 TRUE 和 $TRUE 是不同的。
在 PHP 5.3.0 以后,可以使用 const 关键字在类定义之外定义常量。
Note:和使用 define() 来定义常量相反的是,使用 const 关键字定义常量必须处于最顶端的作用区域,因为用此方法是在编译时定义的。这就意味着不能在函数内,循环内以及 if语句之内用 const 来定义常量。
|
几个 PHP 的“魔术常量” |
|
|
名称 |
说明 |
|
|
文件中的当前行号。 |
|
|
文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP
4.0.2 起, |
|
|
文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增) = |
|
|
函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。 |
|
|
类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如Foo\Bar)。注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字。 |
|
|
Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域(例如 Foo\Bar)。 |
|
|
类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。 |
|
|
当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。 |
PHP支持四种标量值(标量值不能拆分为更小的单元,例如和数组不同)类型:整型值(integer),浮点数值(float),字符串值(string)和布尔值(boolean)。PHP 也支持两种复合类型:数组和对象。这两种类型具可以赋值给变量或者从函数返回。
前、后递增和递减.
PHP 还支持全等运算符 ===(值和类型均相同)和非全等运算符 !==(值或者类型不同)。
任何二元运算符都可以用运算赋值模式,例如“$a -= 5”(从变量 $a 的值中减去 5),“$b *= 7”(变量 $b 乘以 7),等等。
三元条件运算符:$first ? $second : $third
|
运算符优先级 |
|||
|
结合方向 |
运算符 |
附加信息 |
|
|
无 |
clone new |
||
|
左 |
[ |
||
|
右 |
++ -- ~ (int) (float) (string) (array) (object) (bool) @ |
||
|
无 |
instanceof |
||
|
右 |
! |
||
|
左 |
* / % |
||
|
左 |
+ - . |
||
|
左 |
<< >> |
||
|
无 |
== != === !== <> |
||
|
左 |
& |
||
|
左 |
^ |
||
|
左 |
| |
||
|
左 |
&& |
||
|
左 |
|| |
||
|
左 |
? : |
||
|
右 |
= += -= *= /= .= %= &= |= ^= <<= >>= => |
||
|
左 |
and |
||
|
左 |
xor |
||
|
左 |
or |
||
|
左 |
, |
多处用到 |
|
|
算术运算符 |
|||
|
例子 |
名称 |
结果 |
|
|
-$a |
取反 |
$a 的负值。 |
|
|
$a + $b |
加法 |
$a 和 $b 的和。 |
|
|
$a - $b |
减法 |
$a 和 $b 的差。 |
|
|
$a * $b |
乘法 |
$a 和 $b 的积。 |
|
|
$a / $b |
除法 |
$a 除以 $b 的商。 |
|
|
$a % $b |
取模 |
$a 除以 $b 的余数。 |
|
除法运算符总是返回浮点数。只有在下列情况例外:两个操作数都是整数(或字符串转换成的整数)并且正好能整除,这时它返回一个整数。
取模运算符的操作数在运算之前都会转换成整数(除去小数部分)。
取模运算符 % 的结果和被除数的符号(正负号)相同。即 $a % $b 的结果和 $a 的符号相同。
传值赋值
赋值运算表达式的值也就是所赋的值。
对于数组 array,对有名字的键赋值是用“=>”运算符。
引用赋值
|
位运算符 |
||
|
例子 |
名称 |
结果 |
|
$a & $b |
And(按位与) |
将把 $a 和 $b 中都为 1 的位设为 1。 |
|
$a | $b |
Or(按位同或) |
将把 $a 和 $b 中任何一个为 1 的位设为 1。 |
|
$a ^ $b |
Xor(按位异或) |
将把 $a 和 $b 中一个为 1 另一个为 0 的位设为 1。 |
|
~ $a |
Not(按位取反) |
将 $a 中为 0 的位设为 1,反之亦然。 |
|
$a << $b |
Shift left(左移) |
将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)。 |
|
$a >> $b |
Shift right(右移) |
将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)。 |
|
比较运算符 |
||
|
例子 |
名称 |
结果 |
|
$a == $b |
等于 |
TRUE,如果类型转换后 $a 等于 $b。 |
|
$a === $b |
全等 |
TRUE,如果 $a 等于 $b,并且它们的类型也相同。 |
|
$a != $b |
不等 |
TRUE,如果类型转换后 $a 不等于 $b。 |
|
$a <> $b |
不等 |
TRUE,如果类型转换后 $a 不等于 $b。 |
|
$a !== $b |
不全等 |
TRUE,如果 $a 不等于 $b,或者它们的类型不同。 |
|
$a < $b |
小与 |
TRUE,如果 $a 严格小于 $b。 |
|
$a > $b |
大于 |
TRUE,如果 $a 严格大于 $b。 |
|
$a <= $b |
小于等于 |
TRUE,如果 $a 小于或者等于 $b。 |
|
$a >= $b |
大于等于 |
TRUE,如果 $a 大于或者等于 $b。 |
错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。
执行运算符:反引号(``)。
|
逻辑运算符 |
||
|
例子 |
名称 |
结果 |
|
$a and $b |
And(逻辑与) |
TRUE,如果 $a 和 $b 都为 TRUE。 |
|
$a or $b |
Or(逻辑或) |
TRUE,如果 $a 或 $b 任一为 TRUE。 |
|
$a xor $b |
Xor(逻辑异或) |
TRUE,如果 $a 或 $b 任一为 TRUE,但不同时是。 |
|
! $a |
Not(逻辑非) |
TRUE,如果 $a 不为 TRUE。 |
|
$a && $b |
And(逻辑与) |
TRUE,如果 $a 和 $b 都为 TRUE。 |
|
$a || $b |
Or(逻辑或) |
TRUE,如果 $a 或 $b 任一为 TRUE。 |
“与”和“或”有两种不同形式运算符的原因是它们运算的优先级不同 !>&&>||>and>xor>or
|
数组运算符 |
||
|
例子 |
名称 |
结果 |
|
$a + $b |
联合 |
$a 和 $b 的联合。 |
|
$a == $b |
相等 |
如果 $a 和 $b 具有相同的键/值对则为 TRUE。 |
|
$a === $b |
全等 |
如果 $a 和 $b 具有相同的键/值对并且顺序和类型都相同则为 TRUE。 |
|
$a != $b |
不等 |
如果 $a 不等于 $b 则为 TRUE。 |
|
$a <> $b |
不等 |
如果 $a 不等于 $b 则为 TRUE。 |
|
$a !== $b |
不全等 |
如果 $a 不全等于 $b 则为 TRUE。 |
instanceof 用于确定一个 PHP 变量是否属于某一类class的实例: var_dump($a instanceof MyClass); 输出bool(true)
Note: 必须要注意的是 elseif 与 else if 只有在类似上例中使用花括号的情况下才认为是完全相同。
替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;。
foreach 仅能够应用于数组和对象
foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement
break 结束当前 for,foreach,while,do-while 或者 switch 结构的执行。
break 可以接受一个可选的数字参数来决定跳出几重循环。
continue 在循环结构用用来跳过本次循环中剩余的代码并在条件求值为真时开始执行下一次循环。
continue 接受一个可选的数字参数来决定跳过几重循环到循环结尾。默认值是 1,即跳到当前循环末尾。省略 continue 后面的分号会导致混淆。
declare 结构用来设定一段代码的执行指令。
declare (directive)
statement
directive 部分允许设定 declare 代码段的行为。目前只认识两个指令:ticks以及 encoding。
require 和 include 几乎完全一样,除了处理失败的方式不同之外。 require 在出错时产生 E_COMPILE_ERROR 级别的错误。换句话说将导致脚本中止而 include 只产生警告(E_WARNING),脚本会继续运行。
被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path 指定的目录寻找。如果在 include_path 下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工作目录下寻找。如果最后仍未找到文件则 include 结构会发出一条警告;这一点和 require 不同,后者会发出一个致命错误。
require_once 语句和 require 语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含。
goto 操作符可以用来跳转到程序中的另一位置。
PHP 中的所有函数和类都具有全局作用域,可以定义在一个函数之内而在之外调用,反之亦然。
PHP 不支持函数重载,也不可能取消定义或者重定义已声明的函数。
Note: 函数名是大小写无关的,不过在调用函数的时候,使用其在定义时相同的形式是个好习惯。
PHP 的函数支持可变数量的参数和默认参数。参见 func_num_args(), func_get_arg() 和 func_get_args()。
在 PHP 中可以调用递归函数。但是要避免递归函数/方法调用超过 100-200 层,因为可能会使堆栈崩溃从而使当前脚本终止。
默认情况下,函数参数通过值传递(因而即使在函数内部改变参数的值,它并不会改变函数外部的值)。如果希望允许函数修改它的参数值,必须通过引用传递参数。
如果想要函数的一个参数总是通过引用传递,可以在函数定义中该参数的前面加上符号 &:function add_some_extra(&$string)
默认参数的值
PHP 还允许使用数组 array 和特殊类型 NULL 作为默认参数
默认值必须是常量表达式,不能是诸如变量,类成员,或者函数调用等。
注意当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧;否则,函数将不会按照预期的情况工作。
PHP 在用户自定义函数中支持可变数量的参数列表。其实很简单,只需使用 func_num_args(), func_get_arg(),和 func_get_args() 函数即可。
如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。
可变函数不能用于例如 echo, print, unset(), isset(), empty(), include, require 以及类似的语言结构。
当调用静态方法时,函数调用要比静态属性优先.
调用 phpinfo() 或者 get_loaded_extensions() 可以得知 PHP 加载了那些扩展库。同时还应该注意,很多扩展库默认就是有效的。
匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。