深入了解
如果你一直用心学习,你会记得在第二章(http://tech.it168.com/o/2007-08-22/200708221043562.shtml,《PHP开发经典教程(Part 2): 操作符调用》)中,我曾给你上过PHP基本控制结构及操作符的快速速成课。
我也向你展示了PHP如何用于处理输入Web表单中的数据。在本部分的教程中,我将深入讲解PHP操作符及控制结构,向你展示两个新的操作符,一种对条件语句if-else()系列结构的替代方法,以及PHP一些更为有趣的循环结构。因此请接着读下去,接下来的内容将会更加有趣!
在不同的情况之间切换
对控制结构的if-else()系列结构的一种替代方法是PHP的switch-case()语句,该switch-case()语句几乎可与if-else()控制结构做同样的事。其结构看起来如下面所示:
switch (decision-variable) {
case first condition is true:
do this!
case second condition is true:
do this!
... and so on...
}
根据决策变量的值而执行适当的case()块。
可建立缺省块以处理那些在决策变量的值与所列的case()条件中的任何一个都不相匹配的情况。
我将通过使用switch()语句来重新编写我以前写的例子之一,使得这概念变得稍微清楚一些:
<html>
<head></head>
<body>
<?php
// get form selection
$day = $_GET['day'];
// check value and select appropriate item
switch ($day) {
case 1:
$special = 'Chicken in oyster sauce';
break;
case 2:
$special = 'French onion soup';
break;
case 3:
$special = 'Pork chops with mashed potatoes and green salad';
break;
default:
$special = 'Fish and chips';
break;
}
?>
<h2>Today's special is:</h2>
<?php echo $special ?>
</body>
</html>
此处有几个重要的关键字:Break关键字用于跳出switch()语句块且立即移动至switch()语句块后的代码行。缺省关键字用于在传递至switch()的变量不满足列在该块内的任何条件时来执行缺省的语句组。
在这儿,新手通常所犯的错误是忘记在每一case()块末端的中断语句。请记住,如果你忘记跳出case()块,那么PHP将继续执行其所遇到的所有后继case()块中的代码。
更多关于switch()语句的信息,请参看http://www.php.net/manual/en/control-structures.switch.php.
建立条件
通常地,当建立及处理PHP中的表单时,你将HTML表单置放在一个文档中,且通过单独的PHP脚本来进行表单处理。然而,条件语句能够随你任意使用,你可以据此将两页结合为一页。
怎样进行呢?很简单。所有你需要做的就是对表单提交控制组件赋予一名称,且接着在脚本首次加载时检查特定的$_POST容器变量是否含有该名称。若含有,则表单已经被提交,那么你可以处理数据;若不含有该名称,用户仍然没有提交该表单,那么因此你需要产生最初的,未经填充的表单。因此,通过对提交变量的存在与否的测试,聪明的PHP程序员可使用单一的PHP脚本来产生初始表单及在其提交后在适当的时候的输出。
此处为一简单的例子:
<html>
<head></head>
<body>
<?php
/* if the "submit" variable does not exist, */
/* the form has not been submitted - display initial page */
if (!isset($_POST['submit'])) {
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Enter your age: <input name="age" size="2">
<input type="submit" name="submit" value="Go">
</form>
<?php
}
else {
/* if the "submit" variable exists, the form has been submitted - look for and process form data */
// display result
$age = $_POST['age'];
if ($age >= 21) {
echo 'Come on in, we have alcohol and music awaiting you!';
}
else {
echo 'You're too young for this club, come back when you're a little older';
}
}
?>
</body>
</html>
正如你所见,脚本含有两个页面:初始、空白表单及在点击提交按钮后所获得的结果页。为了决定展示哪一页,脚本首先测试$_POST['submit']变量的存在。若未发现其存在,则假定表单尚未提交,然后展示此时的初始列表。一旦提交表单,将调用相同的脚本以处理表单输入。然而,此时的$_POST['submit']变量将被设定,因此PHP将不展示初始页面,而展示含有结果信息的页面。
请注意,为使此起作用,你的提交按钮“名称(name)”属性必须被赋值,且你必须检查该值是否存在于初始的条件语句中。且倘若你想知道,$_SERVER数组是一特定的PHP变量,该特定的PHP变量总是持有服务器信息,该信息包括当前执行脚本的路径及名称。
接下来讲解循环部分。