技术开发 频道

PHP开发经典教程(Part 2): 操作符调用

【IT168 PHP开发】如果你来这里是想学习基本的PHP4或者PHP5知识,那这就是为你准备的,开始享受吧!

并非你的期待

    在该系列教程的第一章中(《PHP开发经典教程(Part 1):入门,》http://tech.it168.com/o/2007-08-20/200708201014531.shtml),我向你简单介绍了PHP,以及PHP是如何适应你的Web应用软件开发环境的。我也教给你了PHP变量的基本内容,以及如何将他们相加、相乘与连接在一起。 

    既然你已经知道了PHP的基本内容,那么该到学习PHP更好的特征之一的时间了,这就是它能够自Web表单自动接收用户输入并将其转换为PHP变量。如果你习惯于编写Perl代码以检索在你的CGI脚本中的表单值,那么,PHP更加简单的方法将会使你高兴的热泪四溅。掏出手绢继续向下看吧。

表单(Form) 

    表单(Form)一直是向你的Web站点添加交互性的最快及最容易的方式之一。表单允许你向客户询问他们是否喜欢你的产品、向偶尔的拜访者要求他们在你的站点留下评价,以及向漂亮的姑娘询问她们的电话号码。并且,PHP可充分地简化处理自Web-based表单所产生的数据的任务,正如第一个例子所示范。这个例子含有两个脚本,一个含有HTML表单(即,form.htm)且另一个含有表单处理逻辑(message.php)。下面是form.htm:

html> <head></head> <body> <form action="message.php" method="post"> Enter your message: <input type="text" name="msg" size="30"> <input type="submit" value="Send"> </form> </body> </html>

在此页面中的关键行在于<form>标签这一行。

<form action="message.php" method="post"> ... </form>

正如你可能已经知道的,<form>标签的“action”属性指定了服务器端脚本(在该实例中为message.php)的名称,该服务器端脚本将处理输入表单中的信息。“method”属性指定了信息将如何传递。

表单操作 

    现在来看看问题的另一半:message.php脚本。该脚本读取用户提交的数据且“用该数据来做一些事情”。下面就是message.php的内容:

<html> <head></head> <body> <?php // retrieve form data $input = $_POST['msg']; // use it echo "You said: <i>$input</i>"; ?> </body> </html>

    当你将一些数据输入form.htm(让我们输入“Boo”)内且将其提交时,表单处理器message.php对其进行读取且向你进行展示(输出结果是”You said:Boo”)。因此,不论什么时候将一表单提交至PHP脚本,在该表单内的所有变量值对将通过一特殊的PHP容器变量$_POST自动变成可在脚本内使用的变量值对。接着可通过使用$_POST容器内的其“名称”而存取表单变量的值,正如我在上述脚本中所做的。 

    显然,PHP也支持表单提交的GET方法。所有你需要做的就是将“method”属性改变为“get”且从变量$_GET而不是$_POST取值。$_GET与$_POST变量实际上是一种特殊类型的PHP类型,该类型被称为“数组(Array)”——我将在稍后教给你们。在此不要对其太担心,仅仅确保你能轻松地用PHP自一表单获取简单的值,且接着向下学习更多的在本文中有用的操作符即可。

谨慎操作 

    因此到目前为止,我们所讨论的脚本一直非常的枯燥,所有它能做的就是添加数字及字符串,且向你读回(但并非完全压倒性地)你自身输入的数据。为了对你的脚本添加一些智能,你需要知道如何建构平常所说的“条件语句(Conditional Statement)”,该语句是指让你的脚本基于比较测试的结果来执行一系列可能的动作之一。并且,因为条件语句是建立在比较的基础上的,所以你首先需要知道如何比较两个变量且确定它们是相同还是不同。 

    你已经了解了一些PHP的算术及字符串操作符。然而,该语言也一起给出了与专门设计出来用于比较两个值的操作符(即所谓的“比较操作符”,Comparison Operator)。下面用一个实际操作来解释该操作符:

<?php /* define some variables */ $mean = 9; $median = 10; $mode = 9; // less-than operator // returns true if left side is less than right // returns true here $result = ($mean < $median); print "result is $result<br />"; // greater-than operator // returns true if left side is greater than right // returns false here $result = ($mean > $median); print "result is $result<br />"; // less-than-or-equal-to operator // returns true if left side is less than or equal to right // returns false here $result = ($median <= $mode); print "result is $result<br />"; // greater-than-or-equal-to operator // returns true if left side is greater than or equal to right // returns true here $result = ($median >= $mode); print "result is $result<br />"; // equality operator // returns true if left side is equal to right // returns true here $result = ($mean == $mode); print "result is $result<br />"; // not-equal-to operator // returns true if left side is not equal to right // returns false here $result = ($mean != $mode); print "result is $result<br />"; // inequality operator // returns true if left side is not equal to right // returns false here $result = ($mean <> $mode); print "result is $result"; ?>

    比较测试的结果总是布尔型(Boolean)的:是真(1)或是假(0,其不印于任何事物上)。这使得比较操作符成为你工具箱里一个不可缺少的部分,因而你可以结合条件语句来使用比较操作符,以将一脚本向下发送至其多个动作路径的任意一个。 

    PHP 4.0也引入了新的比较操作符:===操作符,该操作符允许你测试等式及类型。下面的例子将对其进行解释:

<?php /* define two variables */ $str = '10'; $int = 10; /* returns true, since both variables contain the same value */ $result = ($str == $int); print "result is $result<br />"; /* returns false, since the variables are not of the same type */
/* even though they have the same value */ $result = ($str === $int); print "result is $result<br />"; /* returns true, since the variables are the same type and value */ $anotherInt = 10; $result = ($anotherInt === $int); print "result is $result";
?>

    阅读更多关于PHP比较操作符的内容,请参阅http://www.php.net/manual/en/language.operators.comparison.php。

逻辑问题 

    除了上述我大量使用的比较操作符外,PHP也提供了四个逻辑操作符,该四个逻辑操作符经设计以将条件表达式聚合在一起。在下面的例子中说明该四个操作符:逻辑与(Logical AND)、逻辑或(Logical OR)、逻辑异或(Logical XOR)、逻辑非(Logical NOT):

<?php /* define some variables */ $auth = 1; $status = 1; $role = 4; /* logical AND returns true if all conditions are true */ // returns true $result = (($auth == 1) && ($status != 0)); print "result is $result<br />"; /* logical OR returns true if any condition is true */ // returns true $result = (($status == 1) || ($role <= 2)); print "result is $result<br />"; /* logical NOT returns true if the condition is false and vice-versa */ // returns false $result = !($status == 1); print "result is $result<br />"; /* logical XOR returns true if either of two conditions are true, */
/* or returns false if both conditions are true */ // returns false $result = (($status == 1) xor ($auth == 1)); print "result is $result<br />";
?>

    逻辑操作符在建构条件语句中起着重要的作用,因为其可用于将相关的条件简单并极好的联结在一起。参看逻辑操作符如何使用的更多例子,请参阅http://www.php.net/manual/en/language.operators.logical.php。

条件语句 

    既然你已经了解了所有关于比较及逻辑操作符的内容,那么现在我可以教你条件语句了。正如上文所述,条件语句允许你测试一个特定的条件是真还是假,且基于该结果来执行不同的动作。在PHP中,条件语句最简单的形式是if()语句,其看起来有些类似于下式:

if (condition) { do this! }

    if()的参数是一个条件表达式,其用来评价是真还是假。若语句评价为真,则执行大括号内的所有的PHP代码;若语句评价为假,则跳过大括号内的代码且执行在if()结构之后的代码行。 

    让我向你展示if()语句是如何通过与一个表单结合来工作的。在这个例子中,要求用户输入他或她的年龄。

<html> <head></head> <body> <form action="ageist.php" method="post"> Enter your age: <input name="age" size="2"> </form> </body> </html>

    根据所输入的年龄是大于21还是小于21,ageist.php脚本展示不同的讯息:

<html> <head></head> <body> <?php // retrieve form data $age = $_POST['age']; // check entered value and branch if ($age >= 21) { echo 'Come on in, we have alcohol and music awaiting you!'; } if ($age < 21) { echo "You're too young for this club, come back when you're a little older"; } ?> </body> </html>


 

if-else结构 

    除了if()语句外,PHP也提供if-else结构,该if-else结构用于定义一代码块,该代码块在if()语句中的条件表达式值为假时而得到执行。if-else结构看起来像下面这样:

if (condition) { do this! } else { do this! }


    该结构可在上一例子中得到极为有效的使用:我们可以将两个单独的if()语句合并为一个单一的if-else语句。

<html> <head></head> <body> <?php // retrieve form data $age = $_POST['age']; // check entered value and branch 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>

无序扩展 

    若使读取你代码的人感到糊涂的想法使你感到兴奋,那么你会喜欢由一问号标记(?)代表的三元操作符。让你使你的条件语句难以理解的该操作符,提供了一种用于建立一个单一语句的if-else块的简短语法。因此,当你可以这样做的时候:

<?php if ($numTries > 10) { $msg = 'Blocking your account...'; } else { $msg = 'Welcome!'; } ?>

    你也可以这么做,是和上面的方法是等价的(且更加有意思)。

<?php $msg = $numTries > 10 ? 'Blocking your account...' : 'Welcome!'; ?>

    PHP也让你将条件语句“套入”到彼此的内部。举例而言,下面是一段完全有效的PHP代码:

<?php if ($day == 'Thursday') { if ($time == '0800') { if ($country == 'UK') { $meal = 'bacon and eggs'; } } } ?>

    另外,编写上述代码的更好的方法就是使用一系列的逻辑操作符:

<?php if ($day == 'Thursday' && $time == '0800' && $country == 'UK') { $meal = 'bacon and eggs'; } ?>


 

if-elseif-else结构 

    PHP也向你提供处理多个可能性的方法:if-elseif-else结构。典型的if-elseif-else语句块将看起来像下面所示:

if (first condition is true) { do this! } elseif (second condition is true) { do this! } elseif (third condition is true) { do this! } ... and so on ... else { do this! }

     此处为示范其如何使用的一个例子:

<html> <head></head> <body> <h2>Today's Special</h2> <p> <form method="get" action="cooking.php"> <select name="day"> <option value="1">Monday/Wednesday <option value="2">Tuesday/Thursday <option value="3">Friday/Sunday <option value="4">Saturday </select> <input type="submit" value="Send"> </form> </body> </html>

    正如你所见,此为一简单的表单,该表单允许你自一周中挑选出一天。实际的工作由PHP脚本cooking.php来做:

<html> <head></head> <body> <?php // get form selection $day = $_GET['day']; // check value and select appropriate item if ($day == 1) { $special = 'Chicken in oyster sauce'; } elseif ($day == 2) { $special = 'French onion soup'; } elseif ($day == 3) { $special = 'Pork chops with mashed potatoes and green salad'; } else { $special = 'Fish and chips'; } ?> <h2>Today's special is:</h2> <?php echo $special; ?> </body> </html>

    在该实例中,我使用if-elseif-else控制结构来根据不同的日子分配不同的菜单。请注意,一旦发现该块内的if()分支之一为真,则PHP将执行相应的代码,跳过该块内剩余的if()语句,然后立即跳转到整个if-elseif-else块后的代码行。

    那么目前先到这里,参看更多关于条件语句的例子,请访问http://www.php.net/manual/en/language.control-structures.php。在第三章中,我将教给你更多控制结构、更多操作符及更多稀奇古怪的脚本。所以不要错过啊!

0
相关文章