下面的文章摘自《PHP和MySQL。新手到忍者,第7版》,这是一本学习使用PHP和MySQL构建专业Web应用程序所需的所有工具、原理和技术的实践指南。在本教程中,你将学习PHP的基础知识,包括语句、变量、运算符、注释和控制结构。
现在你已经建立并运行了你的服务器,是时候写你的第一个PHP脚本了。PHP是一种服务器端的语言。这个概念可能有点难掌握,特别是如果你只用客户端语言如HTML、CSS和JavaScript设计过网站。
服务器端语言与JavaScript类似,它允许你将动态生成的内容嵌入到网页的HTML代码中,使你对浏览器窗口中出现的内容有更大的控制权,而这是单独的HTML所不能提供的。JavaScript和PHP的关键区别在于代码的运行阶段。
像JavaScript这样的客户端语言是在从Web服务器下载网页(嵌入式程序和所有)后由Web浏览器读取和执行的。相反,像PHP这样的服务器端语言是在网页被发送到浏览器之前由Web服务器运行的。客户端语言可以控制网页在被浏览器显示后的行为,而服务器端语言则可以在网页被发送到浏览器之前就即时生成自定义网页。
一旦Web服务器执行了嵌入网页的PHP代码,其结果就取代了页面中的PHP代码。浏览器在收到网页时看到的只是标准的 HTML 代码。这就是为什么 PHP 被称为 "服务器端语言":它的工作是在服务器上完成的。
注意:在Web的早期--也就是本书第一版出版的时候- JavaScript是一种客户端脚本语言,主要在浏览器中使用。后来出现了像Ajax这样的技术,它允许JavaScript与服务器进行通信。最近,JavaScript又被用于浏览器和服务器上,以创建数据库驱动的应用程序。虽然JavaScript的这些新用途提供了令人兴奋的可能性,但PHP仍然有很大的用武之地--正如本书所展示的那样
PHP代码是用PHP标签写的。像大多数HTML标签一样,PHP有一个开始标签和一个结束标签:<?php
和?>
。任何在这些PHP标签内的东西都被当作PHP代码并在服务器上运行。
PHP代码必须放在一个扩展名为.php
的文件中。当有人连接到服务器并要求它加载一个扩展名为.php
的文件时,服务器就会把它作为一个 PHP 脚本运行。如果把 PHP 标记放在以.html
或.php
以外的任何扩展名的文件中,Web 服务器将不会运行任何 PHP 代码,而 PHP 代码将被直接发送到浏览器中 - 浏览器并不理解 PHP 代码!
让我们来看看一个 PHP 脚本。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Random Number</title>
</head>
<body>
<p>Generating a random number between 1 and 10:
<?php
echo rand(1, 10);
?>
</p>
</body>
</html>
要运行这段代码,在public
目录下将其保存为random.php
,然后导航到https://v.je/random.php
。
其中大部分是普通的HTML。只有<?php
和?>
之间的一行是 PHP 代码。<?php
标志着一个嵌入式 PHP 脚本的开始,?>
标志着它的结束。网络服务器被要求解释这两个分隔符之间的所有内容,并在将网页发送到请求的浏览器之前将其转换为普通的HTML代码。如果你在浏览器内右键单击,并选择 "查看源代码"(根据你使用的浏览器,标签可能有所不同),你可以看到浏览器呈现的是这样的内容。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Random Number</title>
</head>
<body>
<p>Generating a random number between 1 and 10:
5
</p>
</body>
</html>
服务器上没有包含这个确切代码的HTML文件。这个HTML是在服务器上动态生成的,然后再发送到浏览器上。
试着运行该脚本几次,注意数字的变化。PHP代码被用来生成一个随机数,但在浏览器中查看源代码时,PHP代码的所有迹象都消失了。取而代之的是脚本的输出,它看起来就像标准的HTML。这个例子说明了服务器端脚本的几个优点。
-
安全性。在上面的例子中,我们把一个由网络服务器生成的随机数字放到了网页中。如果我们用JavaScript插入这个数字,这个数字就会在浏览器中生成,有人就有可能修改代码来插入一个特定的数字。
-
没有浏览器的兼容性问题。PHP脚本是由Web服务器单独解释的,所以不需要担心你所使用的语言功能是否被访问者的浏览器所支持。
-
对服务器端资源的访问。服务器上的代码可以做任何事情;它不局限于浏览器的能力。由此产生的HTML可以从数据库或Excel文件中生成,也可以是计算的结果,如用户购物车的总数。
-
减轻客户端的负荷。JavaScript会大大延迟网页的显示(尤其是在移动设备上!),因为浏览器必须在显示网页之前下载并运行脚本。有了服务器端的代码,这种负担被传递给了网络服务器,你可以根据你的应用需要(和你的钱包能承受的范围)使它变得更加强大。
-
选择。当编写在浏览器中运行的代码时,浏览器必须了解如何运行给它的代码。所有的现代浏览器都理解HTML、CSS和JavaScript。要写一些在浏览器中运行的代码,你必须使用这些语言中的一种。通过在服务器上运行生成HTML的代码,你可以选择许多语言--其中之一就是PHP。
基本语法和语句
对于了解 JavaScript、C、C++、C#、Objective-C、Java、Perl 或任何其他 C 派生语言的人来说,PHP 语法会非常熟悉。但如果你对这些语言不熟悉,或者你对编程是个新手,也不必担心。
一个PHP脚本由一系列的命令,或语句组成。每条语句都是一条指令,Web服务器必须遵循这条指令才能进行下一条指令。PHP语句和上述语言中的语句一样,总是由分号(;
)来结束。
这是一个典型的 PHP 语句。
echo 'This is a <strong>test</strong>!';
这是一个echo
语句,用于生成内容(通常是 HTML 代码),发送给浏览器。echo
语句只是把它所给的文本,插入到页面的HTML代码中的PHP脚本所在的位置。
在本例中,我们提供了一串要输出的文本:This is a <strong>test</strong>!
。请注意,这个文本字符串包含了HTML标签(<strong>
和</strong>
),这完全可以接受。
所以,如果我们把这个语句放到一个完整的网页中,下面是产生的代码。
例子。PHP-Echo
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Test page</title>
</head>
<body>
<p><?php echo 'This is a <strong>test</strong>!'; ?></p>
</body>
</html>
如果你把这个文件放在你的Web服务器上,然后用Web浏览器请求它,你的浏览器将收到这个HTML代码。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Test page</title>
</head>
<body>
<p>This is a <strong>test</strong>!</p>
</body>
</html>
我们前面看的random.php
例子包含了一个稍微复杂的echo
语句。
echo rand(1, 10);
你会注意到,在第一个例子中,PHP得到了一些要直接打印的文本,而在第二个例子中,PHP得到了一个要遵循的指令。PHP 试图把任何存在于引号之外的东西都读成它必须遵循的指令。引号内的任何东西都被当作文本--或者用技术术语来说,是一个字符串。PHP 并不把字符串当作指令来处理。它们在应用程序中被视为数据。你可以对它们做一些事情,比如把它们发送到浏览器,但是PHP不会把一个字符串和另一个字符串区别对待。
所以下面的代码将把字符串This is a <strong>test</strong>!
直接传递给echo
命令。
echo 'This is a <strong>test</strong>!';
字符串是用起始引号和结束引号来表示的。PHP将把第一个'
作为字符串的开始,然后找到下一个'
,并把它作为字符串的结束。
引号外的任何内容都被视为一系列要运行的命令。以下是无效的代码。
echo This is a <strong>test</strong>!;
因为引号被去掉了,PHP将首先尝试运行命令This
,然后是命令is
,接着是命令a
,如此循环。由于这些都不是PHP中的有效命令,上述代码会产生一个错误信息。如果你想把某个东西当作文本,记得在它周围加上引号
相反,下面的代码将运行一个有效的命令--内置的 "函数 "rand
--来生成一个随机数,然后将结果传递给echo命令。
echo rand(1, 10);
函数是一种特殊的命令类型,它执行一个特定的任务。在幕后,PHP 会做一些处理,然后生成一个结果。在本例中,rand
函数将产生一个随机数,但不同的函数执行不同的任务。
你可以很快地辨别某样东西是否是一个函数,因为它后面有圆括号。PHP有许多内置的函数,可以让你做各种各样的事情,如发送电子邮件和处理存储在各种类型数据库中的信息。
PHP不会尝试运行任何在字符串中的东西。下面的代码不会处理rand
函数。
echo 'rand(1, 10)';
PHP会把'rand(1, 10)'
看成一个字符串,并将文本rand(1, 10)
发送给浏览器,这可能不是你想做的。理解字符串和代码的区别是很重要的。PHP会把引号外的任何文本看作是一系列它应该遵循的命令。引号内的任何内容都是一个字符串,是 PHP 要处理的数据。
PHP 并不试图去理解字符串。它们可以包含任何顺序的任何字符。但是代码(不在引号内的任何东西)--本质上是一系列的指令--必须遵循一个严格的结构才能被计算机理解。
注意:使用具有语法高亮功能的代码编辑器,可以很容易地迅速看出某物是字符串还是代码。字符串与需要处理的代码会有不同的颜色。
下面的图片显示了Visual Studio代码编辑器中简单的代码高亮显示。
PHP支持单引号('
)和双引号("
)来封装字符串。在大多数情况下,它们是可以互换的。PHP开发者倾向于使用单引号,因为我们经常与HTML代码打交道,而HTML代码往往包含大量的双引号。比如说。
echo '<a href="http://www.sitepoint.com">Click here</a>';
如果这里两端都使用了双引号,我们就需要在href=
后面加一个\
(被称为转义字符)来告诉PHP,这个引号不是字符串的结尾,并对任何我们真正想作为HTML的一部分发送给浏览器的双引号做同样的处理。
echo "<a href=\"http://www.sitepoint.com\">Click here</a>";
由于这个原因,PHP开发人员使用单引号,尽管单引号和双引号之间有一些区别。不过,就我们这里的目的而言,它们实际上是可以互换的。
一个函数可以被认为是程序中的一个微型程序。你可以用函数的名字(如前面的例子中的rand
)和括号来指示 PHP 运行这个函数。指令rand(1, 10)
告诉 PHP 运行名称为rand
的函数。运行一个函数通常也被称为调用一个函数。
PHP中的大多数函数在被调用时都会返回一个值。一旦返回值,PHP的行为就像你在代码中输入了返回值一样。在echo rand(1, 10);
的例子中,我们的echo
语句包含了对rand
函数的调用,该函数以文本字符串的形式返回一个随机数。echo
语句然后输出由函数调用返回的值。
PHP中的每个函数都可以有一个或多个参数,这些参数允许你使函数的行为有一点不同。rand
函数需要两个参数:一个最小和最大的随机数。通过改变传递给函数的值,你可以改变它的工作方式。例如,如果你想要一个1到50之间的随机数,你可以使用这个代码。
echo rand(1, 50);
我们在参数周围加上括号((1, 50)
)有两个原因。首先,它们表明rand
是一个你想调用的函数。第二,它们标志着参数列表的开始和结束--你希望提供的PHP语句--以便告诉函数你希望它做什么。在rand
函数的例子中,你需要提供一个最小值和一个最大值。这些值由一个逗号隔开。
稍后,我们将看一下接受不同类型参数的函数。我们还将考虑完全不接受参数的函数。这些函数仍然需要小括号,尽管在它们之间没有输入任何东西。
继续阅读《介绍PHP。初学者指南》在SitePoint上。