任何服务器脚本语言最常见的应用之一就是处理HTML表达。
<form action = "processorder.php" method = "post"> <table border = "0"> <tr bgcolor = "#cccccc"> <td width = "150">Item</td> <td width = "15">Quantity</td> </tr> <tr> <td>Tires</td> <td align = "center"><input type = "text" name = "tiresqty" size = "3" maxlength = "3"/></td> </tr> <tr> <td>Oli</td> <td align = "center"><input type = "text" name = "oliqty" size = "3" maxlength = "3"/></td> </tr> <tr> <td>Spark</td> <td align = "center"><input type = "text" name = "sparkqty" size = "3" maxlength = "3"/></td> </tr> <tr> <td colspan = "2" align = "center"><input type = "submit" name = "" value = "Submit Order"/></td> </tr> <table/> <form/>
action属性就是用户点击提交按钮时将要载入的URL。
用户在表单中输入的数据将按照method属性中指定的方法发送到这个URL,可以是get或者post。
注意,表单域的名称--tireqty、oliqty、sparkqty。
要考虑对表单域名称的命名采用一种统一的编码标准,这样站点中的所有表单域名称就可以使用相同的格式。
这样,无论在域名称中使用了词的缩写还是下划线,都可以轻松得记住它们。
处理这个表单,需要创建在form标记的action属性中指定的脚本。创建该文件,输入以下代码:
<html> <head> <title>Order Results</title> </head> <body> <h1>Bob's Auto Parts</h1> <h2>Order result</h2> </body> </html>
<html> <head> <title>Order Results</title> </head> <body> <h1>Bob's Auto Parts</h1> <h2> <?php echo "<p>Order Result</p>"; ?> </h2> </body> </html>
点击orderform.html的提交按钮,跳转到processorder.php页面。
此时,查看网页源代码
<html> <head> <title>Order Results</title> </head> <body> <h1>Bob's Auto Parts</h1> <h2> <p>Order Result</p></h2> </body> </html>
并没有显示原始的PHP语句。这是因为PHP解释器已经运行了该脚本,并且用该脚本的输出代替了脚本本身。
这意味着,通过PHP,我们可以生成能在任何浏览器中查看的HTML-换句话说,用户的浏览器并不需要理解PHP。
这个例子简要的说明了服务器端脚本的概念。PHP脚本在WEB服务器上被解释和执行,这与在用户机器上的Web浏览器中解释并执行的Javascript及其他客户端技术是不同的。
现在,这个文件中的代码由如下4部分组成:
HTML
PHP 标记
PHP 语句
空格
<?php 和 ?>叫做PHP标记,可以告诉web服务器PHP代码的开始和结束。
这两个标记之前的任何文本都会被解释成PHP。
PHP标记可以隔离PHP和HTML。
PHP标记有4中不同的风格可以供我们使用。
<?php echo "<p>Order Result</p>"; ?>
就是本书使用的风格。是PHP推荐使用的风格。服务器管理员不能禁用这种风格的标记,因此可以保证在所有服务器上使用这种风格的标记。
这种风格的标记可以在XML文档中使用。
<? echo "<p>Order Result</p>"; ?>
这种风格是最简单的。
要使用这种标记风格(输入字符最少),你必须在配置文件中启用shor_open_tag选项,或者启用短标记选项编译PHP。
不推荐使用这种风格,因为这种风格在许多环境的默认设置中是不支持的。
<script language="php"> echo "<p>Order Result</p>"; </script>
这种风格标记是最长的。
如果读者所使用的HTML编辑器无法支持其他风格标记,可以使用它。
<% echo "<p>Order Result</p>"; %>
这种标记风格和ASP或APS.NET的标记风格相同。如果在配置设定中启用了asp_tags选项,就可以使用它。
如果读者所使用的编辑器不是专门为ASP或ASP.NET设计的,就请不要使用它。
但是请注意,默认情况下,该风格是禁用的。
使用echo,将传递给其自身的字符串打印(或者回显)到服务器。
PHP中,分号是用来分隔语句的。
间隔字符,例如回车、空格、制表符,都会被认为是空格。
注意,浏览器将会忽略HTML的空格字符,PHP引擎同样会忽略这些空格字符。
<h1>hello, world my name is debby</h1>
<h1>hello, world my name is debby</h1>
这两段代码将产生相同的输出,因为他们对浏览器来说是相同的。
但是,我们推荐在HTML的合适位置使用空格,因为这将提高HTML代码的可读性。这同样适用于PHP。
PHP解释器将忽略注释中的任何文本。
PHP支持C、C++、Shell脚本风格的注释。
C风格的多行注释,多行注释可以出现在PHP脚本的开始处:
多行注释/* */,多行注释无法嵌套。
C++风格的单行注释: //
Shell脚本风格:#
使用服务端脚本语言的主要原因就是能够为站点用户提供动态内容。
举例:
<?php date_default_timezone_set("PRC"); echo "<p>Order Result</p>"; echo date("H:i jS-F-Y"); ?>
你也可以使用连接操作符(.)将其编写在一行代码中。
举例:
<?php date_default_timezone_set("PRC"); echo "<p>Order Result".date("H:i jS-F-Y")."</p>"; ?>
看看date()函数的调用。这是函数调用的常用格式。
PHP具有一个可供开发WEB应用程序时使用的可扩展函数库。比如date
我们将一个封闭在圆括号内的字符串传递给该函数。这个字符串就是函数的自变量或参数。
date()函数需要一个传递给它的变量是格式化字符串,这个字符串表示所需要的输出格式。
有三种方式来访问表单数据。
$tireqty // 简短风格
$_POST['tireqty'] // 中等风格
$HTTP_POST_VARS['tireqty'] // 冗长风格
register_globals配置选项设置为on。容易导致安全性文件的错误,不推荐使用。
推荐使用
已被弃用。
这种风格过去曾是最容易移植的,但是如今可以通过register_long_arrays配置指令来禁用它,这样可以改进性能。
因此,如果不需要将捏代码安装在旧版本的服务器,就不要在新代码中使用这种风格。
========
使用简短风格时,脚本中的变量名称应该与HTML表单中的表单域名城相同。
在脚本中,不需要声明变量或者创建这些变量。
简短风格的访问时非常受欢迎的,但是为什么PHP开发小组将该选项设置为off。
因为这可能使读者遇到破坏脚本安全性的编程错误。
由于表单变量会自动转换成全局变量,因此在你所创建的变量与直接来自用户的不可信任的变量之间没有明显的区别。
如果没有对自己的变量赋给一个初始值,脚本用户就可以像表单变量一样传递变量和值,这样可能造成混乱。
如果选择使用方便的简短风格来访问变量,必须注意对你自己的变量赋予一个初始值。
========
中等风格设计了从$_POST\$_GET\$_REQEUST数组之一来检索变量。
$_POST\$_GET数组之一都可以保存表单变量的细节。
使用哪一个数组取决于提交表单时使用的方式POST还是GET。
此外,通过POST或GET方法以及组合方式提交的所有数据都可以通过$_REQEUST数组获得。
这些数组被称作是超级全局变量。
介绍变量的作用域时,会详细介绍这些超级全局变量。
========
将一个变量的值赋值给另一个变量,使用(=)。
$tireqty = $_POST['tireqty']
将如下代码放在订单处理脚本的开始处。
我们将这段代码放置在脚本的最开始处,这样容易查找。
$tireqty = $_POST['tirqty']; $oil = $_POST['oil']; $sparkqty = $_POST['sparkqty'];
是该脚本完成一些可见的操作。可以在脚本结束处添加如下代码:
echo '<p>Your order is as follows: </p>'; echo $tireqty.' tires<br />'; echo $oilqty.' bottles of oil<br />'; echo $sparkqty.' spark plugs<br />';
在这里,还木有检查变量内容,尝试输入一些错误数据并观察发生的情况。
像上例,从用户输入直接获得输入并输出到浏览器是一个有风险的操作,它可能带来安全隐患。你应该对数据进行过滤。
第4章,介绍过滤。
第16章,将深入介绍安全性问题。
点号是字符串连接符,它可以将几段文本连接成一个字符串。
用一个字符串的内容代替一个变量的操作就是插值。
插值只是双引号引用的字符串特性之一,
"$tireqty tires<br/>"中,变量名称将被变量值所代替。
而在单引号中,变量名称,或者任何其他文本都不会经修改而发送给浏览器。
'$tireqty tires<br/>'
变量是表示数据的符号。
字符串是数据本身。
当我们在像这个脚本一样的程序中使用原始数据时,我们将其称之为文本,用来区分变量。
1.6 理解标识符
标识符是变量的名称。
规则是:
标识符可以任何长度,而且可以由任何字母、数字、下划线组成。
标识符不能以数字开始
标识符是区分大小写的。【注:函数名称是个例外--函数名称可以是任意大小写的】
一个变量名称可以与一个函数名称相同。【虽然允许,但尽量避免使用,容易混乱】,此外,不能创建一个与已有函数名同名的函数。
除了从HTML表单中传入的变量外,还可以声明并使用自己的变量。
PHP特性:不要求在使用变量之前声明变量。当第一次给一个变量赋值时,你才创建了这个变量。
我们可以使用赋值操作符给一个变量赋值。
eg:
$totalqty = 0; $totalamount = 0.00;
你也可以将变量赋值给一个变量。
eg:
$totalqty = 0; $totalamount = $totalqty ;
变量类型是指能够保存在该变量中的数据类型。不同的数据可以保存在不同的数据类型中。
PHP支持如下所示的基本数据类型:
Integer(整数〉——用来表示整数
Float(浮点数,也叫Double,双精度值)——用来表示所有实数
String(字符串)——用来表示字符串
Boolean(布尔值)——用来表示true或者False
Array(数组)——用来保存具有相同类型的多个数据项(参阅第3章)
Object(对象)——用来保存类的实例(参阅第6章)
此外还有两个特殊的类型:NULL(空)和resource(资源)。没有被赋值、已经被重置或者被赋值为特殊值NULL的变量就是NULL类型的变量。特定的内置函数(例如数据库函数)将返回resource类型的变量。它们都代表外部资源(例如数据库连接)。
基本上不能直接操作一个resource变量,但是通常它们都将被函数返回,而且必须作为参数传递给其他函数。
PHP是一种非常弱的类型语言,或者动态类型语言。在大多数编程语言中,变量只能保存一种类型的数据,而且这个类型必须在使用变量之前声明。而在PHP中,变量的类型是由赋给变量的值确定的。
如下所示:
$totalqty = 0; $totalamount = 0.00;
由于我们将0赋值给 $totalqty, $totalqty就是一个整数类型的变量。同样,$totalamount是一个浮点类型的变量。
非常奇怪的是,我们可以在脚本中添加如下所示的语句:
$totalamount = ‘Hello’;
$totalamount 变量就可以是字符串类型的。PHP可以在任何时间根据保存在变量中的值来确定变量的类型。
这种在任何时间透明地改变变量类型的功能是非常有用的。
请记住,PHP将“自动地”获得输入的数据类型。一旦从变量中检索变量值,它将返回具有相同数据类型的数据。
使用类型转换,可以将一个变量或值转换成另一种类型。这种转换与语言的类梨转换是相同的。只需在希望进行类型转换的变量之前的圆括号中插入需要转换的临时数据类型即可。例如,我们可以使用类型转换声明上一节中的两个变量。
$totalqty = 0; $totalamount = (float)$totalqty;
第2行代码的意思是“取出保存在$totalqty 中的变量值,将其解释成一个浮点类型,并且将其保存在$totalamount”中。$totalamount变量将变成浮点类型。而被转换的变量并不会改变其类型,因此$totalqty 仍然是整数类型。
你也可以使用PHP的内置函数来测试并设置类型,这将在本章稍后内容介绍。
PHP提供了一种其他类型的变量一可变变量。可变变量允许我们动态地改变一个变量的名称。
可以看到,在这方面,具有非常大的自由度一所有语言都允许改变变量的值,但是并没有太多的语言允许改变变量的类型,至于支持改变变量名称的语言就更少了。
这个特性的工作原理是用一个变量的值作为另一个变量的名称。例如,我们可以设置:
$varname = ‘tireqty’;
于是,我们就可以用 $$varname取代 $tireqty.例如,我们可以设置$tireqty的值:
$$varname = 5;
这个代码等价
$tireqty = 5;
这种代码看上去可能不太容易理解,但是我们将在以后的内容详细介绍它。不用单独列出并使用每一个表单变量,我们可以使用一个循环语句和一个变量来自动处理它们。
正读者在前面所看到的,我们可以改变保存在一个变量中的值。
我们也可以声明常量。
一个常量可以保存一个值,但是常量值一旦被设定后,在脚本的其他地方就不能再更改。
例,可以将要出售的商品单价作为常量保存起来。使用define函数定义这些常量:
define(‘TIREPRICE’, 100); define(‘OILPRICE’, 10); define(‘SPARKPRICE’, 4);
请注意,常量名称都是由大写字母组成的。这样就可以很容易区分变量和常量。
常量和变量之间的一个重要不同点在于引用一个常量的时候,它前面并没有$符号。
如果要使用一个常量的值,只需要使用其名称就可以了。例如:
echo TIREPRICE;
除了可以自己定义常量外,还预定义了许多常量。了解这些常量的简单方法就是运行
phpinfo();
这个函数将给出一个PHP预定义常量和变量的列表,以及其他有用的信息。我们将在以后的内容中逐步介绍它们。
变量和常量的另一个差异在于常景只可以保存布尔值、整数、浮点数或字符串数据。这些类型都是标量数据。
作用域是指在一个脚本中某个变量可以使用或可见的范围。
具有6项基本的作用域规则。
PHP内置超级全局变量可以在脚本的任何地方使用和可见。
常量,一旦被声明,将可以在全局可见;也就是说,它们可以在函数内外使用。
在一个脚本中声明的全局变量在整个脚本中是可见的,但不是在函数内部。
函数内部使用的变量声明为全局变量时,其名称要与全局变量名称一致。
在函数内部创建并被声明为静态的变量圮法在函数外部可见,但是可以在函数的多次执行过程中保持该值(我们将在第5章全面介绍这个思想)。
在函数内部创建的变量对函数来说是本地的,而当函数终止时,该变量也就不存在了。
$_GET和$_POST数组以及一些其他特殊变量都具有各自的作用域规则。这些被称作超级会局变量,它们可以在任何地方使用和可见,包括内部和外部函数。
超级全局变量的完整列表如下所示:
$GLOBALS,所有全局变量数组(就像global关键字,这将允许在一个函数内部访问问全局变量——例如,以$GLOBALS[‘myvariable’]的形式。)
$_SERVER,服务器环境变量数组
$_GET,通过GET方法传递给该脚本的变量数组
$_POST,通过POST方法传递给该脚本的变量数组
$_COOKIE,cookie变量数组
$_FILES,与文件上传相关的变量数组
$_ENV,环境变量数组
$_REQUEST,所有用户输人的变量数组,包括$_GET, $_POST和 $_COOKIE所包含的输入内容(但是,不包括$_FILES4.3.0版本以后)。
$_SESSION,会话变量数组
在本书以后的相关内容中,我们将逐个详细介绍这些变量。
作本章稍后介绍函数和类的时候,我们将详细介绍作用域。从现在开始,在默认情况下,我们所使用的所有变量都是全局变量。
操作符是用来对数值和变景进行某种操作运算的符号。
一般地说,操作符可以带有1个、2个或者3个运算对象,其中大多数操作符都是带有两个运算对象例如,赋值操作符就带有两个对象一左边的对象表示保存值的位置,右边的对象表示表达式。这些运算对象叫做操作数。
算术操作符非常直观一它们就是常见的数学操作符。PHP的算术操作符:
+ 加 $a+$b
- 减 $a-$b
* 乘 $a*$b
/除 $a/$b
% 取余 $a%$b
对于每一个操作符,找们可以保存运算后的结果。例如:
$result=$a+$b;
还可以将减号当作一个一元操作符(也就是,一个只有一个运算对象或操作数的操作符)来使用,表示负值。例如:
$a=-1;
取余操作符返回的是$a除以$b以后的余数。
应该注意到,算术操作符通常用干整型或双精度类型的数据。如果将它们应用于字符串,PHP会试图将这些字符串转换成一个数字。如果其中包含“e”或“E”字符,它就会被当作是科学表示法并被转换成浮点数,否则将会被转换成整数。PHP会在字符串开始处寻找数字,并使用这些数字作为该字符串的值,如果没找到数字,该字符串的值则为0。
我们已经了解并使用了唯一的字符串操作符。
$a=“Bob’s“; $b=“AutoParts”; $result=$a.$b;
变量$result当前保存的值是““Bob’sAutoParts”字符串。
我们已经了解了基本赋值操作符(=)。其读法为“被设置为’例如:
$totalqty=0;
这个语句应该读成“$totalqty被设罝为0”。
与其他操作符一样,使用赋值操作符也会返回一个值。如果写入:
$a+$b
这个表达式的值就适将与加在一起所得到的结果。问样,如果写入:
$a=0;
这个表达式的值为0。
这使你可以进行如下操作:
$b=6+($a=5);
这样赋给变量$b的值就是11。赋值运算的规则是:整个赋值语句的值将赋给左边的操作数。当计算一个表达式的值时,可以使用圆括号来提高子表达式的优先级,正如上例所示。
除了简单的赋值运算,PHP还提供了一系列复合的赋值操作符。每一个操作符都可以很方便地对一个变量进行运算,然后再将运算结果返回给原来的变量。例如:
$a+=5;
以上语句等价于:
$a=$a+5;
每一个算术操作符和字符串连接操作符都有一个对应的复合赋值操作符。如下所有复合赋值操作符及其用途
+= $a+=$b $a=$a+$b
-= $a-=$b $a=$a-$b
*= $a*=$b $a=$a*$b
/= $a/=$b $a=$a/$b
%= $a%=$b $a=$a%$b
.= $a.=$b $a=$a.$b
所有递增操作符都有两个功能---将变量增加1后再将值赋给原变量。
eg:
$a=4; echo ++$a;
其运行结果是:首先将变量$a加1,再将加1后的结果赋值给原变量。
但是,如果把―放在$a的后面,就是使用后置递增操作符。
eg:
$a=4; echo $a++;
这个语句的执行结果刚好相反。也就是,首先$a的值被返回并显示在屏幕上,然后,它再加1。
操作符–-的行为与操作符++的行为类似。
引用操作符&可以在关联赋值中使用。
通常,在将一个变量的值赋给另一个变量的时候,先产生原变量的一个副本,然后再将它保存在内存的其他地方。
eg:
$a=5; $b=$a;
这两行代码首先产生$a的一个副本,然后再将它保存到$b中。如果随后改变$a的值,$b的值将不会改变。
可以使用引用操作符&来避免产生这样的副本。
eg:
$a=5; $b=&$a; $a=7;//$a and $b are now both 7
引用是非常有趣的。请记住,引用就像一个别名,而不是一个指针。$a和$b和都指向了内存的相同地址。
可以通过重置它们来改变所指向的地址,如下所示:
unset($a);
重置并不会改变$b(7)的值,但是可以破坏$a和值7保存在内存中的链接。
比较操作符用来比较两个值。比较操作符表达式根据比较结果返回逻辑值:
相等的比较操作符==(两个等于号〉允许测试两个值是否相等。
如果相等,这个表达式返回的结果为true如果不等,这个表达式返回的结果为false。
一般地说,非0数值都是true,0值为false。
PHP还支持其他一些比较操作符。如下,需要注意的一点是,恒等操作符(三个等于号只有当恒等操作符两边的操作
数相等并且具有相同的数据类型时,其返回值才为true。例如,0=='0'将为true,但是0==='0'就不是true,因为
左边的0是一个整数,而另一个0则是一个字符串。
== 等于 $a= =$b
=== 恒等 $a= = =$b
!= 不等 $a!=$b
!== 不恒等 $a!= =$b
<>不等$a<>$b
<小于$a<$b
>大于$a>$b
<=小于等于$a<=$b
>=大于等于$a>=$b
逻辑操作符用来组合逻辑条怍的结果。例如,我们可能对取值千0~100之间的变量$a的值感兴趣,那么我们可以使用
“与”操作符测试条件$a>=0和$a<=100,如下所示:
$a>=0&&$a<=100
PHP支持逻辑与(AND)、或(OR)、异或(XOR)以及非(NOT)的运箅。
如下给出了这个逻辑操作符的集合及其用法。
! 非 !$b 如果$b是false,则返回true;否则相反
&& 与 $a&&$b 如果$a和$b都是true,则结果为true;否则为false
|| 或 $a||$b 如果$a和$b中有一个为true或者都为true时,其结果为true;否则为false
and 与 $a and $b 与&&相同,但其优先级较低
or 或 $a or $b 与||相同,但其优先级较低
操作符和“and”和“or”比&&和||的优先级要低。在本章的后续内容中,我们将详细介绍优先级问题。
位操作符可以将一个整型变呈当作一系列的位(Bit,比特)来处理。在PHP中,读者可能发现它们并不经常使用,伹是在这里,我们还是列出了它们。
到目前为止,除了我们已经介绍的操作符外,还有一些其他操作符。
逗号操作符“,”是用来分隔函数参数和其他列表项的,这个操作符经常被附带地(非独立)使用。
两个特殊的操作符new和->,它们分别用来初始化类的实例和访问类的成员。它们将在第6章详细介绍。
此外,还有一些操作符,我们在这里简单地介绍一下。
操作符?:语法格式如下所示:
condition ? value if true : value if false
二元操作符类似于条件语句if-else的表达式版本,这一点我们将在本章后续内容详细介绍。举一个简单的例子:
($grade >= 50 ? ‘Passed’ : ‘Failed’)
这个表达式对学生级别进行评分,“Passed”〔及格)或“Failed“(不及格)。
错误抑制操作符@可以在任何表达式前面使用,即任何有值的或者可以计算出值的表达式之前,例如:
$a = @(57/0);
如果没有@操作符,这一行代码将产生一个除0警告。使用这个操作符,这个警告就会被抑制住。
如果通过这种方法抑制了一些警告,一旦遇到一个警告,你就要写一些错误处理代码。
如果已经启用了PHP配置文件中的track_errors特性,错误信息将会被保存在全局变量$php_errormsg中。
执行操作符实际上是一对操作符,他是一对反向单引号(··)。反向单引号不是一个单引号,通常,它与~位于键盘的相同位置。
PHP试着将反向单引号之间的命令当做服务器端的命令来执行。表达式的值就是命令的执行结果。例如,在类似UNIX的操作系统中,可以使用:
$out = `ls -la`; echo ‘<pre>’.$out.’</pre>’;
在windows服务器上,可以使用:
$out = `dir c:`; echo ‘<pre>’.$out.’</pre>’;
这两种版本都会得到一个目录列表并且将该列表保存在$out中,然后,在将该列表显示在浏览器中或用其他方法来处理。
此外,还有其他的方法可以执行服务器端的命令。我们将在第19章中详细介绍。
PHP提供了一些数组操作符。数组元素操作符([])允许访问数组元素。在某些数组上线文中,也可以使用=>操作符。这些操作符在第三章详细的介绍。
也可以使用许多其他的数组操作符。我们会在第三章详细的介绍他们,在这里给出了完整的列表
+ 联合 !$b 返回一个包含了$a和$b中所有元素的数组
= = 等价 $a&&$b 如果$a和$b具有相同的元素,返回true
= = = 恒等 $a||$b 如果$a和$b具有相同的元素以及相同的顺序,返回true
!= 非等价 $a and $b 如果$a和$b不是等价的,返回true
<> 非等价 如果$a和$b不是等价的,返回true
!= =非恒等 $a or $b 如果$a和$b不是恒等的,返回true
你将注意到,给出的数组操作符都有作用在标量变量上的等价操作符。只要你记得+执行了标量类型的加操作和数组的联合操作——即使你对其行为后面使用的实现算法不感兴趣——该行为也是有意义的。你不能将标量类型与数组进行比较。
只有一个类型操作符:instanceof这个操作在面向对象编程中使用,操作符允许检查一个对象是否是特定类的实例,
如下例所示:
class sampleClass{}; $myObject = new sampleClass(); if ($myObject instanceof sampleClass) echo “myObject is an instance of sampleClass”;
现在,你已经了解了如何使用PHP的操作符,下面就可以开始计算Bob订单表单的总金额和税金。要完成这些任务,可以将如下所示的代码添加到脚本中:
$totalqty = 0; $totalqty = $tireqty + $oilqty + $sparkqty; echo 'Items ordered: '.$totalqty.'<br />'; $totalamount = 0.00; define('TIREPRICE', 100); define('OILPRICE', 10); define('SPARKPRICE', 4); $totalamount = $tireqty * TIREPRICE + $oilqty * OILPRICE + $sparkqty * SPARKPRICE; echo 'Subtotal: $'.number_format($totalamount,2).'<br />'; $taxrate = 0.10; // local sales tax is 10% $totalamount = $totalamount * (1 + $taxrate); echo 'Total including tax: $'.number_format($totalamount,2).'<br />';
我们使用了number_format()函数来格式化总金额的输出格式,将总金额的输出控制成带有两位小数的字符串。这个函数来自PHP的Math库。
1.12 理解操作符的优先级和结合性
一般地说,操作符具有一组优先级,也就是执行它们的顺序。
操作符还具有结合性,也就是同一优先级的操作符的执行顺序。这种顺序通常有从左到右(简称左)、从右到左(简称右)或者不相关。
表给出了操作符的优先级和结合性。在这个表中,最上面的操作符优先级最低,按着表的由上而下的顺序,优先级递增。
请注意,我们还没有包括优先级最高的操作符:普通的圆括号。它的作用就是提高圆括号内部操作符的优先级。这样,在需要的时候,就可以避开操作符的优先级法则。
可以在一个表达式中使用任意个圆括号,最里层圆括号的表达式将最先计算。
在上表中,另一个需要注意的但没有介绍的操作符是print语言结构,它等价于语句。这两个结构都将生成输出。
通常,在本书中,我们会使用echo,但是如果你认为print更容易阅读,也可以使用print语句。print和echo都不是真正的函数,但是都可以用带有参数的函数形式进行调用。二者都可以当作一个操作符:只要将要显示的字符串放置在echo或print关键字之后。
以函数形式调用print将使其返回一个值(1)。如果希望在一个更复杂的表达式中生成输出,这个功能可能是有用的,但是print要比echo的速度慢。
eg:
print('good');
将输出good。
eg:
echo print('good');
将输出good1
这个函数可以来操作和测试变量。
大部分的可变函数都是用来测试一个函数的类型的。
string gettype(mixed var)
确定变量的类型并且返回一个包含类型名称的字符串:bool、int、double、string、array、object和resource
如果变量类型不是标准类型之一,该函数就会返回“unknown type(未知类型)”
bool settype(mixed var, string type)
传递一个要被改变类型的变量,以及一个包含了上述类型某个类型的字符串。
PHP还提供了一些特定类型的测试函数。每个函数都是使用一个变量作为其参数,并且返回true或false。
函数如下:
is_array():检查变量是否是数组。
is_double():is_float():is_real()(所有都是相同的函数):检查变量是否为浮点数。
is_long():is_int():is_integer()(所有都是相同的函数):检查变量是否为整数。
is_string():检查变量是否是字符串。
is_bool():检查变量是否是布尔值。
is_object():检查变量是否是一个对象。
is_resource():检查变量是否是一个资源。
is_null():检查变量是否为Null。
is_scalar():检查变量是否是标量,即,一个整数、布尔值、字符串或浮点数。
is_numeric():检查变量是否是任何类型的数字或数字字符串。
is_callable():检查该变量是否是有效的函数名称。
PHP有几个函数可以用来测试变量的状态。
格式:bool isset ( mixed var [, mixed var [, ...]] )
需要一个变量名称作为参数,如果变量存在,返回true,否则返回false。
也可以传递一个由逗号间隔的变量列表,如果所有变量都被设置了,该函数发那会true。
相对应的unset()函数来销毁一个变量。
void unset(mixed var);[;mixed var[,....])
这个函数将销毁一个传进来的变量。
函数empty()用来检查一个变量是否存在,以及它的值是否非空和非0,相应的返回值为true或false。
可以通过调用一个函数来实现转换变量数据类型的目的。
int intval(mixed var[, int base]); float floatval(mixed var); string strval(mixed var);
intval()函数也允许在要转换的变量为字符串时是定转换的进制基数。(这样,就可以将十六进制的字符串转换成整数)