### PHP 入门速成

PHP 简介
PHP 是一种用于创建动态 WEB 页面的服务端脚本语言。如同 ASP 和 ColdFusion，用户可以混合使用 PHP 和 HTML 编写 WEB 页面，当访问者浏览到该页面时，服务端会首先对页面中的 PHP 命令进行处理，然后把处理后的结果连同 HTML 内容一起传送到访问端的浏览器。但是与 ASP 或 ColdFusion 不同，PHP 是一种源代码开放程序，拥有很好的跨平台兼容性。用户可以在 Windows NT 系统以及许多版本的 Unix 系统上运行 PHP，而且可以将 PHP 作为 Apache 服务器的内置模块或 CGI 程序运行。
除了能够精确的控制 WEB 页面的显示内容之外，用户还可以通过使用 PHP 发送 HTTP 报头。用户可以通过 PHP 设置 cookies，管理用户身份识别，并对用户浏览页面进行重定向。PHP 具有非常强大的数据库支持功能，能够访问几乎目前所有较为流行的数据库系统。此外，PHP 可以与多个外接库集成，为用户提供更多的实用功能，如生成 PDF 文件等。
用户可以直接在 WEB 页面中输入 PHP 命令代码，因而不需要任何特殊的开发环境。在 WEB 页面中，所有 PHP 代码都被放置在“<?php”和“ ?>”中。此外，用户还可以选择使用诸如<SCRIPT LANGUAGE="php"></SCRIPT>等的形式。PHP 引擎会自动识别并处理页面中所有位于 PHP 定界符之间的代码。
PHP 脚本语言的语法结构与 C 语言和 Perl 语言的语法风格非常相似。用户在使用变量前不需要对变量进行声明。使用 PHP 创建数组的过程也非常简单。PHP 还具有基本的面向对象组件功能，可以极大的方便用户有效组织和封装自己编写的代码。
PHP 语法概述
A. 基本语法
即使初次接触 PHP 的用户也会发现自己对 PHP 的语法风格并不陌生。
例如：<？php
echo “Hello！”；
？>
显示结果为“Hello！”。
PHP 中，所有的变量都以标识“$”开头。我们可以对上述代码做如下改动：
<？php
$greeting = “Hello！”；
echo $greeting；
？>
改变后的代码显示结果不变。
PHP 中使用“.”符号连接不同的字符串，而其它的算术运算符则继承了流行编程语言的风格。举例如下：
<？php
$greeting = “Hello！”；
$num = 3 + 2；
$num++；
echo “$greeting $num people！”；
？>
显示结果为“Hello！6 people！”。
PHP 对各种运算符及运算规则都有一套完整的规定，如果用户具有 C 或 C++语言的编程背景的话，可以发现一切都得心应手。
与 Perl 语言一样，在 PHP 中，如果在双引号包含的字符串中含有变量的话，该变量将用相应的变量值替换；如果字符串被单引号包含，则不做替换。例如：
<？php
$name = ‘PETER’；
$greeting_1 = “Hello, $name！”；
$greeting_2 = ‘Hello, $name！’；
echo “$greeting_1\n”；
echo “$greeting_2\n”；
？>
显示结果为：
Hello, PETER！
Hello, $name！
（注：上述代码中的“\n”为换行符，只能在双引号字符串下使用）
B. 变量
PHP 允许用户象使用常规变量一样使用环境变量。例如，在页面 http://www.nba.com/scores/index.html 中包含如下代码：
<？php
echo “[$REQUEST_URI]”；
？>
则输出结果为[/scores/index.html]
C. 数组
用户在使用 PHP 创建数组时，可以把数组索引（包括常规索引或关联索引）加入方括号中。例如：
$fruit[0] = ‘banana’;
$fruit[1] = ‘apple’;
$favorites['animal'] = ‘tiger’;
$favorites['sports'] = ‘basketball’;
如果用户在向数组赋值时不指明数组下标，PHP 将自动把该对象加入到数组末尾。例如对于上述$fruit 数组可以用以下方式赋值而保持结果不变，
$fruit[] = ‘banana’;
$fruit[] = ‘apple’;
同样，在 PHP 中，用户还可以根据需要建立多维数组。例如：
$people[‘David’][‘shirt’] = ‘blue’;
$people[‘David’][‘car’] = ‘red’;
$people[‘Adam’][‘shirt’] = ‘white’;
$people[‘Adam’][‘car’] = ‘silver’;
在 PHP 中，用户还可以使用 array()函数快速建立数组。例如：
$fruit = array(‘banana’,‘apple’);
$favorites = array(‘animal’ => ‘tiger’, ‘sports’ => ‘basketball’);
或者使用 array()函数创建多维数组：
$people = array (‘David’ => array(‘shirt’ => ‘blue’,’car’ => ‘red’),
‘Adam’ => array(‘shirt’ => ‘white’,‘car’ => ‘silver’));
此外，PHP 还提供了内置函数 count()用于计算数组中的元素数量。例如：
$fruit = array(‘banana’, ‘apple’);
print count($fruit);
显示结果为 2。
D. 结构控制
在 PHP 中，用户可以使用“for”或“while”等的循环结构语句。例如：
for ($i = 4; $i < 8; $i++) {
print “I have eaten $i apples today.\n”； }
或
$i = 4; while ($i < 8) {
print “I have eaten $i apples today.\n”;
$i++;
}
返回结果为：
I have eaten 4 apples today.
I have eaten 5 apples today.
I have eaten 6 apples today.
I have eaten 7 apples today.
此外，用户还可以使用“if”和“elseif”等的选择性结构语句。例如：
if ($user_count > 200) {
print “The site is busy right now!”;}
elseif ($user_count > 100) {
print “The site is active right now!”;
else {
print “The site is idle - only $user_count user logged on.”;
}
表单处理
PHP 为用户提供了众多方便易用的强大功能。在表单的处理方面，PHP 能够自动地将由客户端表单发送的数据赋值给相应变量，从而极大地简化了整个表单的处理过程。
举例来说，用户建立如下表单：
<INPUT TYPE=TEXT NAME=“name” VALUE=“PETER”>
当使用 PHP 对上述代码进行处理时，PHP 自动创建一个名为$name 的变量，并将变量值“PETER”赋予该变量。
用户可以直接对 PHP 创建的变量进行各种操作，例如显示变量值：
echo “Hi $name！”；
或对变量值进行验证：
if ($name == “PETER”) { echo “Please check out your email.”； }
下面，我们就来看一下如何通过使用 PHP 创建并处理一个基本的表单。在示例当中，我们将会要求表单的填写者回答几个简短的问题，包括输入表单填写者的姓名，电子邮件地址，完成调查问卷等。
这里，我们将所要设计的页面按照功能划分成表单显示和表单处理两个功能模块。这样，用户就不必设计两个不同的页面，而只需要在同一个 PHP 页面中通过逻辑控制显示或处理相应的功能模块。
A. 表单显示
我们通过第一个功能模块来实现表单的显示。具体代码为：
<？php
function display_form()
{
global $PHP_SELF;
？>
<FORM TARGET=“<？php echo $PHP_SELF; ？>”METHOD=GET>
Name: <INPUT TYPE=TEXT NAME=“name”><BR>
Favorite Fruit: <INPUT TYPE=RADIO NAME=“fruit” VALUE=“apple”>Apple
<INPUT TYPE=RADIO NAME=“fruit” VALUE=“orange”>Orange
<INPUT TYPE=RADIO NAME=“fruit” VALUE=“banana”>Banana
Favorite Times to Eat Fruit:
<INPUT TYPE=CHECKBOX NAME=“times[]” VALUE=“m”>Morning
<INPUT TYPE=CHECKBOX NAME=“times[]” VALUE=“n”>Noon
<INPUT TYPE=CHECKBOX NAME=“times[]” VALUE=“d”>Dinner
<INPUT TYPE=CHECKBOX NAME=“times[]” VALUE=“l”>Latenight
<INPUT TYPE=HIDDEN NAME=“stage” VALUE= “results”>
<INPUT TYPE=SUBMIT VALUE= “Thanks!”>
</FORM>
<?php
}
?>
上述代码中绝大多数都是创建表单所必需的 HTML 代码。在此，我们仅对所涉及到的 PHP 知识做一下简单介绍。
首先，我们来看一下代码开始处的变量$PHP_SELF。变量$PHP_SELF 是 PHP 中一个很方便的指针，其变量值就是当前页面的 URL 地址。这样，我们就可以通过在随后的 form 标签中将 TARGET 的值设定为$PHP_SELF，实现由该表单页面处理表单的目的。这里，我们使用$PHP_SELF 变量而不使用页面的实际地址，是因为通过使用$PHP_SELF 变量，我们可以方便对编写的页面代码进行修改和移动，而不必担心在每次改动之后重新输入新的页面地址。
另外，在使用$PHP_SELF 变量时，我们采用了如下方式：
global $PHP_SELF；
这表明代码中的$PHP_SELF 变量为全局变量。用户在使用 PHP 的过程中一定要注意 PHP 中任何的函数变量都是局部变量。这就意味着任何函数变量的作用域都只局限于包括该变量的函数本身。即使函数外存在同名变量，变量的值也不相同。因此，如果我们没有在代码中以显式方式声明函数变量$PHP_SELF 为全局变量具有全局唯一值的话，用户就会发现函数中的变量$PHP_SELF 的值将会为空，而不是我们预先所期望的当前页面的 URL 地址。
用户可能已经注意到我们将表单复选选项的名称设置为 times[]数组，而把单选选项的名称设定为 fruit 常规变量。这是因为单选选项只允许用户选择唯一一个正确选项，因此 fruit 变量的值只可能是一个字符串；相反，复选选项则允许用户做多重性选择。如果，用户希望 PHP 能够保存用户可能作出的所有选择的话，就需要使用数组来保存所有的可能值。按照 PHP 的语法规则，我们通过在变量名 times 后面加上方括号，使 PHP 知道该变量是一个数组变量而不是普通的常规变量。
最后，我们设定了一个名为 stage 的隐含变量，通过使用该变量，我们可以控制是否显示表单还是处理表单结果。
B. 处理表单
我们通过页面的第二个功能模块完成对表单输入结果的处理过程。其代码如下：
<？php
function process_form()
{
global $name;
global $fruit;
global $times;
if ($fruit == ‘apple’) { $fruit_message = ‘You love apple.’; }
elseif ($fruit == ‘orange’) { $fruit_message = ‘You love orange’; }
else { $fruit_message = ‘You love banana.’; }
$favorite_times = count($times);
if ($favorite_times <= 1)
{$times_message = ‘You should eat fruit more often.’;}
elseif ($favorite_times > 1 && $favorite_times < 4)
{$times_message = ‘Those are good times to eat fruit.’;}
else {$times_message = ‘You are eating too much fruit.’;}
echo “Hello $name.”;
echo “$fruit_message $times_message”;
}
?>
在表单处理代码中，首先我们按照上文所介绍的$PHP_SELF 变量处理方式，将我们在创建表单时所建立的变量全部声明为全局变量。接着，我们查看用户具体选择了哪一个 fruit 选项。然后，使用 count()函数得出用户选择的复选选项的个数，然后按照该结果进行相应的判断。最后，我们输出用户的姓名以及表单处理后的信息。
C. 合并表单功能模块
现在，我们把已经分别独立完成的两个功能模块组合在一起，同时设定两个模块之间的逻辑规则。我们可以在 display_form()和 process_form()之下加入以下代码：
<？php
if (empty($stage)) { display_form(); }
else { process_form(); }
？>
首先，我们通过 empty（）函数查看$stage 变量的值是否为空。如果$stage 变量的值为空，例如当访问者首次浏览表单页面，PHP 将会运行 display_form()函数，同时在客户端显示表单；如果$stage 变量的值不为空，例如当用户填写完表单并返回结果后$stage 变量的值为 results，PHP 将会运行 process_form()函数，完成对表单的处理。
小结
通过以上三步，我们使用 PHP 快速地在单一页面上实现了表单显示和表单处理的功能。
设定 Cookies
PHP 提供了强大的设定和读取 Cookies 的功能。在此，我们不想对 Cookies 进行过多的介绍，但是用户应当认识到在设计 WEB 应用的过程中 Cookies 可能起到的重要作用。
用户可以使用 PHP 提供的 setcookie()函数创建或修改 Cookie。setcookie()函数总共包括 6 个参数，能够对 cookie 进行精确的控制。
使用 setcookie()函数设定 cookie 的最简单的方式为：
setcookie(‘name’, ‘PETER’);
这样，在用户访问整个站点页面的期间，PHP 将会自动创建一个名为$name 的变量，并将值 PETER 赋予该变量。我们把这种 Cookie 称做会话 Cookie，即其作用域为用户的整个会话过程。
如果我们希望 Cookie 值在访问用户离开站点后仍然有效的话，可以使用 setcookie()函数的相应参数，设定 Cookie 的有效期。这里，我们需要对 PHP 的时间设定进行一下说明。PHP 是一种基于 Unix 开发出的技术，用户需要用自 1970 年 1 月 1 日之后的秒数表示当前时间。对于没有任何 Unix 系统编程经验的广大普通用户来说真是有点摸不着头脑。不过，大家大可不必担心，因为 PHP 为我们提供了一个非常简便的解决方式，即 mktime()函数。用户可以在 mktime()函数中按照小时、分、秒、月、日、年的顺序输入用户希望表示的时间，mktime()函数将会返回该时间距离 1970 年 1 月 1 日的秒数。举例来说，如果我们希望设定一个有效期持续到 2000 年的 Cookie 的话，可以使用如下方式：
<？php
$y2k = mktime(0,0,0,1,1,2000);
setcookie(‘name’, ‘PETER’, $y2k);
？>
如果用户希望更新已经存在的 cookie，可以采用简单的直接覆盖原值的方法。例如，即使我们已经按照上述代码对 cookie 进行了设定，仍可以对其做以下改动：
<?php
$y2k = mktime(0,0,0,1,1,2000);
setcookie(‘name’, ‘JEFF’, $y2k);
?>
这里需要提醒用户注意的一点是，虽然我们对 cookie 值进行了修改，但是在没有加载经过修改的页面之前，PHP 中$name 变量的值仍然不会改变。如果用户希望在更改 cookie 值的同时更改 相应 PHP 变量的值，可以采用以下方式：
<？php
$name = ‘JEFF’;
$y2k = mktime(0,0,0,1,1,2000);
setcookie(‘name’, $name, $y2k);
？>
在有效期参数之后，setcookie()函数提供了设置可以读取 cookie 值的页面的路径和域的参数。出于安全因素的考虑，在默认情况下，只有与设定 cookie 的页面处于同一目录或下属子目录的页面才能够读取相应 cookie 值。但是，根据需要，我们也可以对这一设定进行修改。例如：
<？php
setcookie(‘name’, ‘jeff’, $y2k, ‘~/myhome’, ‘.domain.com’);
？>
通过上述代码，我们设定凡是位于~/myhome 目录下，属于.domain.com 域的页面都能够读取该 cookie 值。
setcookie()函数的最后一个参数较少被使用。该参数可以指定只向运行安全连接协议，如 SSL，的 WEB 服务器返回 cookie 值。如果用户希望启动该参数功能，只需要将其值设为 1 即可。
使用 PHP 删除 cookie 也非常简便，用户只需要在 setcookie()函数中输入希望删除的 cookie 的名称，PHP 就会自动完成所有的删除工作。例如：
<?php setcookie(‘name’); ?>
最后，关于 cookie 还要说明一点。考虑到 HTTP 协议中 cookie 的运作方式，用户一定要注意应当在显示任何文字之前发送所有的 cookie 设置。如果用户在编写代码时先设定显示的文字然后再发送 cookie 的话，PHP 就会弹出报错信息，无法完成 cookie 的设置。举例来说：
<?php
setcookie(‘name’, ‘jeff’);
echo “Hello Everyone!”;
?>
这种 cookie 设置的方式是正确的。但是如果采用如下方式：
<?php
echo “Hello Everyone!”;
setcookie(‘name’, ‘jeff’);
?>
则会出现报错信息，无法完成 cookie 的设置。
日期和时
PHP 提供了多种简便的功能以方便用户显示和控制日期和时间。 如果用户希望以某种形式显示某一日期或时间的话，可以使用 PHP 提供的 date()函数。date().函数包括两个参数，分别用于设定日期的显示格式以及代表显示日期的时间戳，其中，时间戳必须采用距离 1970 年 1 月 1 日的秒数方式表示。如同 C 语言中的 strftime()函数或 Perl 中的 POSIX::strftime()函数，PHP 中的 date()函数具有非常多的格式设置选项，这里就不一一说明了。举例来说，date()函数的使用方式如下：
<?php
$birthday_stamp = mktime(10,10,0,10,20,1975);
$birthday_formatted = date(‘F d, Y - g:i a’,$birthday_stamp);
echo “Peter was born on $birthday_formatted.”
?> 显示结果为：Peter was born on October 10, 1975--10:10 p.m.
总结
PHP 是一种快速创建动态 WEB 站点的强大工具，其熟悉的语法风格和源代码开放的特性能够使使用者在最短的时间内了解和掌握其功能并进而发挥出其巨大潜力。希望本文能够对广大读者有所启发。祝大家早日成为 PHP 高手。