《PHP学习手册Word.docx》由会员分享,可在线阅读,更多相关《PHP学习手册Word.docx(129页珍藏版)》请在三一办公上搜索。
1、PHP学习手册WordPHP 5手册 章 5. 基本语法 目录 从 HTML 中分离 指令分隔符 注释php学习 从 HTML 中分离 PHP 的脚本由文件中一对特殊的标记所引起的内容,当解释器分析一个文件时,所有特殊标记外的普通文件,解释器不对其做任何处理,而特殊标记内文件将作为 PHP 代码被解释器分析执行。该运行机制将允许您在 HTML 中嵌入 PHP 代码:PHP 标记外的内容将被完全独立开,不做任何处理,而内部的将作为 PHP 代码解析。 用来标记 PHP 代码块的标记共有四套,其中只有两套总是有效;另外两套可以在 php.ini 配置文件中开启或者关闭。虽然短格式的标记和 ASP
2、风格的标记可能比较省力,但是某些情况下您可能必须要使用长格式的标记。比如,您打算在 XML 或者 XHTML 中嵌入 PHP 代码,您将需要使用 形式的标记以适应 XML 的标准。 PHP 支持的标记为: 例子 5-1. 从 HTML 中分离的方式 1. 2. 3. 4. This is a shortcut for echo (some editors (like FrontPage) dont like processing instructions); %= $variable; # This is a shortcut for 优先选用的方式为第一种方式 ,因为它允许您在 XML 结构
3、,如 XHTML 的代码中使用 PHP。 第二种方式并非总是可用的。只有当您在 php.ini 配置文件中激活 short_open_tag 选项,才是可用的。您也可以通过使用 short_tags 函数,或者使用 -enable-short-tags 选项 configure PHP 来激活短格式标记。在 php.ini-dist 配置文件中,默认是开启短格式标记的,但是建议您不要使用该标记。 在 PHP 配置文件中开启选项 asp_tags 将激活第四种方式。 注: ASP 风格的标记添加于 PHP 3.0.4 注: 当开发大型应用程序或者用于分发的函数库,或者在不受您控制的 PHP 服务
4、器上面开发程序时,请不要使用短格式的标记,因为目标服务器可能并不支持短格式的标记。为了便于移植,请保证用于再分发的代码中不使用短格式的标记。 PHP 代码块结束标记奖自动包含最近的一个结尾的新行。而且,结束标记自动隐含一个分号; 您不需要为 PHP 代码块的最后行追加一个分号。 PHP 允许您使用如下的结构:例子 5-2. 更高级的脱离 php学习 This is true. This is false. PHP 将直接输出结束标记和下一个开始标记中的任何非 PHP 代码。当需要输出大量的文本时,退出 PHP 解析模式将比使用 echo 或者 print 或者此类的函数打印所有文本要更加的有效
5、。 指令分隔符 指令分隔方式与 C 或者 Perl 类似 - 每个语句由分号格开。 结束标记同样隐含语句的结束,因此下面的代码是等价的: 注释 PHP 支持 C,C+ 和 Unix Shell 风格的注释。例如: echo This is a test; / This is a one-line c+ style comment /* This is a multi line comment yet another line of comment */ echo This is yet another test; echo One Final Test; # This is shell-sty
6、le style comment “单行”注释仅仅注释到行末或者当前的 PHP 代码块,视乎哪个首先出现。 This is an example. The header above will say This is an example. 小心不要嵌套 C 风格的注释,当注释大量代码时,可能犯该错误。 “单行”注释仅仅注释到行末或者当前的 PHP 代码块,视乎哪个首先出现。这意味着 / ? 后面的 HTML 代码将被打印出来:? 跳出了 PHP 模式并且返回 HTML 模式,而且 / 注释符并不会影响到模式的转换。 章 6. 类型 目录 介绍 布尔型 整型 浮点型 字符串 数组 对象 资源 N
7、ULL 本文档中使用的伪类型 类型戏法 介绍 PHP 支持八种原始类型。 四种标量类型: 布尔型 整型 浮点型 字符串 两种复合类型: 数组 对象 最后是两种特殊类型: 资源 NULL 为了确保代码的易读性,本手册还介绍了一些伪类型: 混和 数字 回馈 您可能还会读到一些关于“双精度”类型的参考。实际上 double 和 float 是相同的,由于一些历史的原因,这两个名称同时存在。 变量的类型通常不是由程序员设定的,确切地说,是由 PHP 根据该变量使用的上下文在运行时决定的。 注: 如果你想查看某个表达式的值和类型,用 var_dump。 注: 如果你只是想得到一个易读懂的类型的表达方式用
8、于调试,用 gettype。要查看某个类型,不要用 gettype,而用 is_type 函数。以下是一些范例: 如果你要将一个变量强制转换为某类型,可以对其使用强制转换或者 settype 函数。 注意变量根据其当时的类型在特定场合下会表现出不同的值。更多信息见类型戏法。此外,你还可以参考 PHP 类型比较表看不同类型相互比较的例子。 布尔型 这是最简单的类型。boolean 表达了真值,可以为 TRUE 或 FALSE。 注: 布尔类型是 PHP 4 引进的。 语法 要指定一个布尔值,使用关键字 TRUE 或 FALSE。两个都是大小写不敏感的。 通常你用某些运算符返回 boolean 值
9、,并将其传递给流程控制。 / = is an operator which test / equality and returns a boolean if ($action = show_version) echo The version is 1.23; / this is not necessary. if ($show_separators = TRUE) echo n; / .because you can simply type if ($show_separators) echo n; 转换为布尔值 要明示地将一个值转换成 boolean,用 (bool) 或者 (boolean
10、) 来强制转换。但是很多情况下不需要用强制转换,因为当运算符,函数或者流程控制需要一个 boolean 参数时,该值会被自动转换。php学习 参见类型戏法。 当转换为 boolean 时,以下值被认为是 FALSE: 布尔值 FALSE 整型值 0 浮点型值 0.0 空白字符串和字符串 0 没有成员变量的数组 没有单元的对象 特殊类型NULL 所有其它值都被认为是 TRUE。 警告 -1 和其它非零值一样,被认为是 TRUE! 整型 一个 integer 是集合 Z = ., -2, -1, 0, 1, 2, . 中的一个数。 参见任意长度整数 / GMP,浮点数 和 任意精度数学库 / BC
11、Math。 语法 整型值可以用十进制,十六进制或八进制符号指定,前面可以加上可选的符号。 如果用八进制符号,数字前必须加上 0,用十六进制符号数字前必须加上 0x。 例子 6-1. 整数文字表达 在字面上,整型变量正式的结构可以为: 整型数的字长和平台有关,尽管通常最大值是大约二十亿。PHP 不支持无符号整数。 整数溢出 如果你指定一个数超出了 integer 的范围,将会被解释为 float。同样如果你执行的运算结果超出了 integer 范围,也会返回 float。 警告 不幸的是 PHP 中有个 bug,因此当有负数参与时结果并不总是正确。例如当运算 -50000 * $million
12、时结果是 -429496728。不过当两个运算数都是正数时就没问题。 这个问题已经在 PHP 4.1.0 中解决了。 PHP 中没有整除的运算符。1/2 产生出浮点数 0.5。您可以总是舍弃小数部分,或者使用 round 函数。 转换为整形 要明示地将一个值转换为 integer,用 (int) 或 (integer) 强制转换。不过大多数情况下都不需要强制转换,因为当运算符,函数或流程控制需要一个 integer 参数时,值会自动转换。您还可以通过函数 intval 来将一个值转换成整型。 参见类型戏法。 从布尔值转换 FALSE 将产生出 0,TRUE 将产生出 1。 从浮点数转换 当从浮
13、点数转换成整数时,数字将被取整。 如果浮点数超出了整数范围,则结果不确定,因为没有足够的精度使浮点数给出一个确切的整数结果。在此情况下没有警告,甚至没有任何通知!php学习 在 Linux 下返回结果是最小负数,而在 Windows 下返回结果是零。 警告 决不要将未知的分数强制转换为 integer,这样有时会导致意外的结果。 更多信息见浮点数精度。 从字符串转换 参见字符串转换为数字。 从其它类型转换 注意 没有定义从其它类型转换为整型的行为。目前的行为和值先转换为布尔值一样。不过不要依靠此行为,因为它会未加通知地改变 浮点型 浮点数可以用以下任何语法定义: 形式上: LNUM 0-9+
14、DNUM (0-9*.LNUM) | (LNUM.0-9*) EXPONENT_DNUM ( (LNUM | DNUM) eE+-? LNUM) 浮点数的字长和平台相关,尽管通常最大值是 1.8e308 并具有 14 位十进制数字的精度。 浮点数精度 显然简单的十进制分数如同 0.1 或 0.7 不能在不丢失一点点精度的情况下转换为内部二进制的格式。这就会造成混乱的结果:例如,floor(0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999.。 这和一个事实有关,那就是不可能精确的用有限位数表达某些十进制分数。例如,十进制的 1
15、/3 变成了 0.3333333. . .。 所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数库或者 gmp 函数库。 转换为浮点数 如果您希望了解有关何时和如何将字符串转换成浮点数的信息,请查阅标题为“将字符串转换为数字”的有关章节。对于其它类型的值,其情况类似于先将值转换成整型,然后再转换成浮点。请参阅“转换为整型”有关章节以获取更多信息。 字符串 string 是一系列字符。在 PHP 中,字符和字节一样,也就是说,一共有 256 种不同字符的可能性。这也暗示 PHP 对 Unicode 没有本地支持。请参阅函
16、数 utf8_encode 和 utf8_decode 以了解有关 Unicode 支持。 注: 一个字符串变得非常巨大也没有问题,PHP 没有给字符串的大小强加实现范围,所以完全没有理由担心长字符串。 语法 字符串可以用三种字面上的方法定义。 单引号 双引号 定界符 单引号 指定一个简单字符串的最简单的方法是用单引号括起来。 要表示一个单引号,需要用反斜线转义,和很多其它语言一样。如果在单引号之前或字符串结尾需要出现一个反斜线,需要用两个反斜线表示。注意如果你试图转义任何其它字符,反斜线本身也会被显示出来!所以通常不需要转义反斜线本身。 注: 在 PHP 3 中,此情况下将发出一个 E_NO
17、TICE 级的警告。 注: 和其他两种语法不同,单引号字符串中出现的变量和转义序列不会被变量的值替代。 双引号 如果用双引号括起字符串,PHP 懂得更多特殊字符的转义序列: 表格 6-1. 转义字符 序列 n r t $ 0-71,3 含义 换行) 回车) 水平制表符) 反斜线 美元符号 双引号 此正则表达式序列匹配一个用八进制符号表示的字符 x0-9A-Fa-f1,2 此正则表达式序列匹配一个用十六进制符号表示的字符 此外,如果试图转义任何其它字符,反斜线本身也会被显示出来! 双引号字符串最重要的一点是其中的变量名会被变量值替代。细节参见字符串解析。 定界符 另一种给字符串定界的方法使用定界
18、符语法。应该在 之后提供一个标识符,然后是字符串,然后是同样的标识符结束字符串。 结束标识符必须从行的第一列开始。同样,标识符也必须遵循 PHP 中其它任何标签的命名规则:只能包含字母数字下划线,而且必须以下划线或非数字字符开始。 警告 很重要的一点必须指出,结束标识符所在的行不能包含任何其它字符,可能除了一个分号之外。这尤其意味着该标识符不能被缩进,而且在分号之前和之后都不能有任何空格或制表符。同样重要的是要意识到在结束标识符之前的第一个字符必须是你的操作系统中定义的换行符。例如在 Macintosh 系统中是 r。 如果破坏了这条规则使得结束标识符不“干净”,则它不会被视为结束标识符,PH
19、P 将继续寻找下去。如果在这种情况下找不到合适的结束标识符,将会导致一个在脚本最后一行出现的语法错误。 定界符文本表现的就和双引号字符串一样,只是没有双引号。这意味着在定界符文本中不需要转义引号,不过仍然可以用以上列出来的转义代码。变量会被展开,但当在定界符文本中表达复杂变量时和字符串一样同样也要注意。 例子 6-2. 定界符字符串例子 ?php $str = foo = Foo; $this-bar = array(Bar1, Bar2, Bar3); $foo = new foo; $name = MyName; echo foo. Now, I am printing some $foo
20、-bar1. This should print a capital A: x41 EOT;? 注: 定界符支持是 PHP 4 中加入的。 变量解析 当用双引号或者定界符指定字符串时,其中的变量会被解析。 有两种语法,一种简单的和一种复杂的。简单语法最通用和方便,它提供了解析变量,数组值,或者对象属性的方法。 复杂语法是 PHP 4 引进的,可以用花括号括起一个表达式。 简单语法 如果遇到美元符号,解析器会尽可能多地取得后面的字符以组成一个合法的变量名。如果你想明示指定名字的结束,用花括号把变量名括起来。 同样也可以解析数组索引或者对象属性。对于数组索引,右方括号标志着索引的结束。对象属性则和
21、简单变量适用同样的规则,尽管对于对象属性没有像变量那样的小技巧。php学习 red, banana = yellow); / Works but note that this works differently outside string-quotes echo A banana is $fruitsbanana.; / Works echo A banana is $fruitsbanana.; / Works but PHP looks for a constant named banana first / as described below. echo A banana is $fr
22、uitsbanana.; / Wont work, use braces. This results in a parse error. echo A banana is $fruitsbanana.; / Works echo A banana is . $fruitsbanana . .; / Works echo This square is $square-width meters broad.; / Wont work. For a solution, see the complex syntax. echo This square is $square-width00 centim
23、eters broad.; ? 对于任何更复杂的情况,应该使用复杂语法。 复杂语法 不是因为语法复杂而称其为复杂,而是因为用此方法可以包含复杂的表达式。 事实上,用此语法你可以在字符串中包含任何在名字空间的值。仅仅用和在字符串之外同样的方法写一个表达式,然后用 和 把它包含进来。因为不能转义“”,此语法仅在 $ 紧跟在 后面时被识别。用一些例子可以更清晰: width00 centimeters broad.; / Works echo This works: $arr43; / This is wrong for the same reason as $foobar is wrong / o
24、utside a string. In otherwords, it will still work but / because PHP first looks for a constant named foo, it will / throw an error of level E_NOTICE (undefined constant). echo This is wrong: $arrfoo3; / Works. When using multi-dimensional arrays, always use / braces around arrays when inside of str
25、ings echo This works: $arrfoo3; / Works. echo This works: . $arrfoo3; echo You can even write $obj-values3-name; echo This is the value of the var named $name: $name; ? 访问字符串中的字符 字符串中的字符可以通过在字符串之后用花括号指定所要字符从零开始的偏移量来访问。 注: 为了向下兼容,仍然可以用方括号。不过此语法在 PHP 4 中不赞成使用。 例子 6-3. 一些字符串例子 实用函数及操作符 字符串可以用“.”运算符连接。注
26、意这里不能用“+”运算符。更多信息参见字符串运算符。 有很多实用函数来改变字符串。php学习 普通函数见字符串函数库一节,高级搜索和替换见正则表达式函数。 还有 URL 字符串函数,以及加密解密字符串的函数。 最后,如果还是找不到你要的函数,参见字符类型函数库。 字符串转换 您可以用 (string) 标记或者 strval 函数将一个值转换为字符串。当某表达式需要字符串时,字符串的转换会在表达式范围内自动完成。例如当你使用 echo 或者 print 函数时,或者将一个变量值与一个字符串进行比较的时候。阅读手册中有关类型和类型戏法中的部分有助于更清楚一些。参见 settype。 布尔值 TR
27、UE 将被转换为字符串 1,而值 FALSE 将被表示为 。这样您就可以随意地在布尔值和字符串之间进行比较。 整数或浮点数数值在转换成字符串时,字符串即为表示这些数值数字。 数组将被转换成字符串 Array,因此您无法通过 echo 或者 print 函数来输出数组的内容。请参考下文以获取更多提示。 对象将被转换成字符串 Object。如果您因为调试需要,需要将对象的成员变量打印出来,请阅读下文。如果您希望得到该对象所依附的类的名称,请使用函数 get_class。 资源类型将会以 Resource id #1 的格式被转换成字符串,其中 1 是 PHP 在运行时给资源指定的唯一标识。如果您希
28、望获取资源的类型,请使用函数 get_resource_type. NULL 将被转换成空字符串。 正如以上所示,将数组、对象或者资源打印出来,并不能给您提供任何关于这些值本身的有用的信息。请参阅函数 print_r 和 var_dump,对于调试来说,这些是更好的打印值的方法。 您可以将 PHP 的值转换为字符串以永久地储存它们。这种方法被称为串行化,您可以用函数 serialize 来完成该操作。如果您在安装 PHP 时建立了 WDDX 支持,您还可以将 PHP 的值串行化为 XML 结构。 字符串转换为数值 当一个字符串被当作数字来求值时,根据以下规则来决定结果的类型和值。 如果包括“.
29、”,“e”或“E”其中任何一个字符的话,字符串被当作 float 来求值。否则就被当作整数。 该值由字符串最前面的部分决定。如果字符串以合法的数字数据开始,就用该数字作为其值,否则其值为 0。合法数字数据由可选的正负号开始,后面跟着一个或多个数字,后面跟着可选的指数。指数是一个“e”或者“E”后面跟着一个或多个数字。 此转换的更多信息见 Unix 手册中关于 strtod(3) 的部分。 如果你想测试本节中的任何例子,可以拷贝和粘贴这些例子并且加上下面这一行自己看看会发生什么: ?php echo $foo=$foo; type is . gettype ($foo) . n; ? 不要指望在
30、将一个字符转换成整型时能够得到该字符的编码。如果您希望在字符编码和字符之间转换,请使用 ord 和 chr 函数。 数组 PHP 中的数组实际上是一个有序图。图是一种把 values 映射到 keys 的类型。此类型在很多方面做了优化,因此你可以把它当成真正的数组来使用,或列表,散列表,字典,集合,栈,队列以及更多可能性。因为可以用另一个 PHP 数组作为值,也可以很容易地模拟树。 解释这些结构超出了本手册的范围,但对于每种结构你至少会发现一个例子。要得到这些结构的更多信息,我们建议你参考有关此广阔主题的外部著作。 语法 定义 array 可以用 array 语言结构来新建一个 array。它
31、接受一定数量用逗号分隔的 key = value 参数对。 array( key = value , . ) / key 可以是 integer 或者 string / value 可以是任何值 bar, 12 = true); echo $arrfoo; / bar echo $arr12; / 1 ? key 可以是 integer 或者 string。如果键名是一个 integer 的标准表达方法,则被解释为整数。PHP 中数组下标的变量类型不会对数组造成影响,数组的类型只有一种,它可以同时包含整型和字符串型的下标。 值可以是任何值。 array(6 = 5, 13 = 9, a = 42); echo $arrsomearray