跳转到内容

入门级 PHP Web 应用程序开发/我们的第一个程序:Hello,World!

来自维基教科书,开放书籍,开放世界

“Hello,World!”的传统

[编辑 | 编辑源代码]

“Hello,World!”通常是任何学习一门新语言的学生学习的第一个程序。恰好,由于我们在这本书中涵盖了多种语言和方法,您将看到针对每个解决问题的方法的不同版本的“Hello,World!”。并非本书中的所有示例都将从所有可能的不同方法中呈现出来。但是,重要的是要意识到,无论何时您进行 Web 应用程序开发,总有不同的方法可以解决一个问题。

纯 HTML 4.01 中的“Hello,World!”

[编辑 | 编辑源代码]

编写“Hello,World!”的第一种方式是作为静态 HTML 4.01 页面。HTML 本身将构成您将编写的几乎所有 Web 应用程序的基础,因此绝对不要低估正确 HTML 的重要性。

HTML 中的 Hello,World

这将在您的浏览器窗口中简单地显示“Hello,World!”,页面标题为“Hello,World!”。

什么是 DOCTYPE?

[编辑 | 编辑源代码]

上面 HTML 文档中的第一行是 DOCTYPE——文档类型。文档类型告诉 Web 浏览器如何解释随后的文档。今天编写的 Web 应用程序有几种有效的文档类型。重要的是您为应用程序选择正确的类型,然后坚持使用它。

上面的文档类型告诉浏览器使用 HTML 4.01 Strict——这是我们将在整本书中使用的文档类型。还有其他文档类型可供使用

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

这是 HTML 4.01 Strict。如果您以前使用过 HTML,例如 HTML 3.2 或 HTML 4 Transitional,这可能是最难适应的。如果您是 HTML 新手,这是您学习开始的最佳选择。无论哪种方式,未来的 HTML 版本(称为 XHTML)都将最像 HTML 4.01 Strict,并且建议用于非 XHTML 文档。

我们在本书中使用 HTML 4.01 Strict,因为截至目前(2006 年 6 月),XHTML 1.1 仍然不受 Microsoft Internet Explorer 支持,而 Microsoft Internet Explorer 在浏览器市场上占有相当大的份额(如果不是大多数的话)。一旦 Microsoft Internet Explorer 包含对 XHTML 1.1 标准的支持,使用 XHTML 1.1 作为新网页和应用程序的默认文档类型将是明智的(合乎逻辑的)。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

这是 HTML 4.01 Transitional,它允许用 HTML 4 编写“旧式”HTML。最值得注意的是,HTML 4.01 Transitional 在 HTML 4.01 Strict 标准中添加了表示性和已弃用的元素。建议那些需要使用包含的元素的用户使用它。在 互联网上有一个已弃用的元素列表。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">

这是用于框架集页面的。HTML 允许框架集页面,这些页面在浏览器窗口中定义框架,然后将内容加载到这些框架中。在页面上使用框架通常存在争议,通常不鼓励使用。但是,与所有规则一样,也有例外。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

这些是 XHTML 文档类型。XHTML 是 HTML 的 XML 化版本。它比 HTML 更好,但是,仍然缺乏 Microsoft Internet Explorer 的完全支持(截至 2006 年 6 月),这使得它目前在受控环境之外不可行[1]

文档的 Content-Type

[编辑 | 编辑源代码]

互联网上提供的每个文档都包含一个“Content-Type”标头。对于基于 HTML 的 Web 应用程序,必须传递的正确 Content-Type 标头是

Content-Type: text/html

还建议您指定应用程序使用的字符集。 UTF-8 是一个常见的选择[2],因为它包含大多数人在多种语言中使用的字符。对于使用 UTF-8 的应用程序,正确的 Content-Type 标头是

Content-Type text/html; charset=utf-8

什么是“正确”的 HTML?

[编辑 | 编辑源代码]

有一些基本规则可以遵循,以确保您始终编写正确的 HTML

  • 如果某个元素有结束标签,请使用它
  • 不要制作标签汤——也就是说,不要用 <p> 开始一个段落,然后用 <p> 开始一个新段落,而没有结束第一个段落。
  • 使用 HTML 4.01 或任何版本的 XHTML 时,使用小写 HTML 标签。早于 4.0 的 HTML 版本使用大写标签,并且已弃用。
  • 避免内联 style 属性。如果可能,使用类和 id 属性以及级联样式表来呈现效果。(有时,必须使用内联样式信息;但是,这种行为在技术上已弃用——内容和表示不应该以这种方式混合在一起。)
  • 不要在 HTML 4.x 文档中使用 XHTML 样式的空标签。一些浏览器(例如 Microsoft Internet Explorer)在 HTML 4.x 文档中遇到这些标签时会卡住,并且不知道如何解析它们。结果可能不可预测。
  • 使用 W3C 验证服务 来验证您的工作。如果您正在进行一个内部网络而不是公共互联网的项目,仍然使用该服务验证您的工作,尽管您需要粘贴标记进行验证。
    • 一些大型公司(例如 AT&T)可能拥有自己内部的文档验证器副本。如果您可以使用此类验证器,请使用它——它允许您验证无法在开放互联网上传输的机密内容。
    • 如有必要,以某种方式将 W3C 验证服务镜像到本地。

从这个例子中能学到什么?

[编辑 | 编辑源代码]

这本质上是一个小型程序,它指示 Web 浏览器显示信息,并具有对用户有用的标题。它包含有效 HTML 4.01 Strict 的所有正确元素,这意味着它应该在任何支持 HTML 4.01 Strict 的 Web 浏览器中正确呈现。这是可以使用的最小文档,并且不包含任何样式信息(我们将在后面学习)。

在这个例子中,您已经了解了文档类型(对于有效的 HTML 文档是必需的),使用字符集设置 Content-Type 标头(这对于确保正确显示非常重要,尤其是如果它包含非 ASCII 字符,例如 ß、¥、¶、© 或 ®),并且您看到了 HTML 文档的基本结构。随着我们继续学习,我们将以此为基础,包括以下三个示例。

使用 PHP 的“Hello,World!”

[编辑 | 编辑源代码]

在前面的示例中,您看到了 HTML 4.01 如何凭借常规的静态内容独立存在。这意味着当一个 HTML 文档被保存到 Web 服务器上时,就像上面的那个,它不会在没有人工干预的情况下改变。有人必须编辑并保存文件,然后再次上传到服务器,才能让其他人看到更改[3]

Hello, World in PHP

在这个例子中,您可以看到文件的一部分发生了变化。我们使用了一个新的扩展名 - .php 保存了文件,这告诉服务器它必须在服务器上进行处理。此外,文件中还有一些新项目。我们将看一下在这个程序中发现的组件。

“打开”和“关闭”PHP

[edit | edit source]

PHP 文件在计算机世界中有点奇怪——实际上,文件通常只有一部分是 PHP。文件的其余部分是输出语言是什么;在本例中,它将是 HTML 4.01 Strict。为了使这成为可能,应用程序编写者必须有一种方法来告诉 PHP 在哪里开始和停止查找 PHP 代码。

为此,我们使用 PHP 开启标签 (<?php) 来告诉 PHP 开始读取指令,并使用 PHP 关闭标签 (?>) 来告诉 PHP 停止读取指令[4]。开始和结束标签之间的所有内容都由 PHP 读取并执行。标签之外的所有内容都将被无障碍地传递。在第 1 行,您看到了第一个 PHP 开启标签,而在第 11 行,您看到了第一个关闭标签。它们之间的所有内容都由 PHP 运行。

PHP 中的注释

[edit | edit source]

您在上面的 Hello, World 程序中遇到的下一件事是注释。PHP 中通常使用两种类型的注释。我们遇到的第一个注释是多行注释,它从第 2 行开始,到第 5 行结束。此注释以/*开头,以*/结束。这些类型的注释借鉴了 C 计算机语言。

多行注释适合于跨越多行的备注。在上面的示例中,我们使用多行注释进行演示。它通常在文件的标题中很有用,可以简要概述文件的作用。有些人使用标题来提供有关版权、许可证信息和其他与文件相关的元数据的信息。随着时间的推移,您将开发自己的代码编写风格,包括在项目中构建文件的方式。

用于管理数据库连接的文件的元数据的标题示例可能如下所示

<?php
/*
 * Database Library for MySQL
 * Copyright © 2006 Michael B. Trausch, <[email protected]>
 * Released under the terms of the GNU General Public License v3
 */

我们看到的第二个注释,紧随第一个注释之后,是单行注释。此注释以//字符开头,在行尾结束。这些类型的注释适合于简要描述接下来的几行代码,或进行某项操作的原因。

关于注释,最重要的是,如果它们是多余的,它们就不会包含在语言中。重要的是要了解,缺乏注释的代码以及注释过多的代码都可能变得难以阅读和理解,无论是其他人还是以后的自己。许多程序员在编写代码时理解自己的代码,但是,当他们在六个月后返回时,却不知道自己为什么那样编写代码。了解何时注释以及何时不注释很重要。随着时间的推移,您将学会何时在代码中放置注释合适。

PHP 函数

[edit | edit source]

PHP 有一个庞大的函数库,您可以使用这些函数来帮助您的代码真正执行操作。在上面的示例中,PHP header() 函数用于向 Web 浏览器发送HTTP 头[5]。这相当于(有时,对于旧版浏览器,效果更好)第一个示例中使用的 HTML <meta> 标签。

PHP 有大量您作为程序员可以调用的函数。幸运的是,PHP 手册 是一款非常易于使用的资源,它对可用函数进行分类,并允许您搜索它们。作为 PHP 应用程序开发人员,PHP 手册可能是您拥有的最重要的资源之一。在阅读本书的过程中,您会发现更多我们将使用的 PHP 函数。

PHP 变量

[edit | edit source]

Web 应用程序编程,尤其是 PHP 的一大难题是,您希望内容是动态的——您不希望使用永远不会更改的静态页面集。变量是动态页面的基石。如果 PHP 没有任何类型的变量,那么利用该语言的其他功能来帮助处理、存储和检索数据将极其困难。

变量可能是 PHP 中使用最广泛的项目,也可以说是任何编程或脚本语言中最广泛使用的项目。确保您理解它们是什么以及它们是如何使用的非常重要。变量是数据的容器,简单来说。它们中的每一个都有一个名称。在我们上面的 Hello, World 脚本示例中,我们创建的第一个变量是

$hello_text = 'Hello, World!';

我们在这行代码中所做的就是将文本“Hello, World!”分配给我们称之为$hello_text的变量。现在,可以随时更改此变量。我们可以让$hello_text变量保存文本“Hello, Betsy!”,甚至保存数字 42!

我们将在本书的后面更多地了解变量。现在,重要的是要意识到,当您分配变量时,变量的名称必须在左侧,而它的新内容必须在右侧。它们之间有一个等号。

我们还需要立即了解的一件事是,PHP 代码中有两种类型的文本字符串。您可能会注意到,在第 9 行,我们使用单引号,而在第 10 行,我们使用双引号。它们之间存在差异。单引号字符 (') 指定一个绝对文字字符串。单引号标记之间的任何内容都将完全按其出现的方式存储。

但是,双引号有点不同。使用双引号字符串可以执行一些巧妙的技巧。我们在第 10 行看到了其中一个技巧:我们将一个变量的内容包含在另一个变量中。这称为变量插值,是某些类型语言中的常见做法。这是 PHP 的一项功能,您将在程序中经常使用它,并且您将在其他程序员的代码中经常看到它。看一下第 10 行

$page_title = "$hello_text (PHP Version)";

我们可以看到那里有一个双引号。由于我们知道(在这种情况下)$hello_text包含什么,我们可以看一下这行代码,并“看到”PHP 从中获得了什么

$page_title = 'Hello, World! (PHP Version)';

PHP 将对$hello_text的引用替换为$hello_text在当时的内容。我们将在本书的后面更详细地讨论这一点。

关于变量:camelCase 或下划线?

[edit | edit source]

编码风格因项目而异,也因人而异。编码风格中一个主要问题是如何命名变量。您已经看到,我们选择使用下划线——例如,$hello_text——而不是“camelCasing”(例如,$helloText)。这样做的原因是经验;作者发现,使用 camelCasing 往往会在许多编程语言中创造出很容易错误地键入变量名称的情况,这会导致难以调试和修复的问题。一个例子是,如果$helloText意外地被键入为$hellotext$helloTExt——当<SHIFT>键难以按下或卡住时很常见——并且在快速浏览代码以查看问题所在时不容易发现。

由于 PHP 的工作方式,如果避免使用 camelCasing,更容易创建正确的代码。最初可能需要一段时间才能习惯使用下划线来分隔变量名称中的单词,但这是一种确保命名方式一致的非常有用的方法。但是请记住,如果您使用他人的代码——比如别人的类库——您可能会发现他们选择使用 camelCasing,而至少使用一点点 camelCasing 是不可避免的。

无论你使用哪种编码风格,如果你正在使用 PHP 创建一个新的 Web 应用程序,最好在项目中包含一个文件来描述编码风格,以便作为参考,并保持一致。

“Hello, World!” 的其他变体

[编辑 | 编辑源代码]

还有其他几种方法可以编写 Hello, World 程序,展示与浏览器和用户交互的其他方式。但是,现在我们将忽略它们:它们使用了另一种叫做“JavaScript”的语言——JavaScript 真的值得单独一节。请记住,这是入门材料,所以我们不会深入探讨这里会遇到的许多语言、主题和概念。[6]

回答以下问题。在思考并回顾答案后,将答案写下来(或打出来)可以帮助你更好地记住信息以便将来使用。回答完问题后,将你的答案与书中的答案进行比较。

  1. 什么是变量,使用它的目的是什么?答案
  2. 单引号字符串的目的是什么?答案
  3. 双引号字符串的目的是什么?答案
  4. 用 PHP 重新编写 Hello, World 程序,使用另一个名为 $user_name 的变量。将你的姓名存储在该变量中,并使程序显示“Hello yourname,欢迎来到这个世界!”答案

我们已经介绍了很多信息。鼓励你进行一些练习,帮助你使用本页中介绍的一些想法。

  1. 查看互联网上提供的 W3 HTML 验证程序。在 Web 浏览器中查看你的示例,并将浏览器“查看源代码”选项的输出粘贴到验证服务中。请记住这个工具——它在未来对你很重要!
  2. 查看 PHP 手册,了解如何使用它。这是你在开发中经常使用的重要资源。
  1. ^ XHTML 1.0 Transitional 可以与 text/html Content-Type 标头一起使用,但是,对如何使用它有限制。有关 XHTML 的更多信息,请参阅 XHTML 附录
  2. ^ UTF-8 是一种八位字符集,用于在计算机系统之间表示 Unicode 字符。Unicode 在许多操作系统安装中用作标准,并且能够表示整个 Unicode 字符集标准。有关 UTF-8 的更多信息,请参阅 维基百科上的信息
  3. ^ 有时,新的更改不会立即被以前查看过该文档的 Web 浏览器获取。第 2 节中使用的示例可能会更改为“Hello, User!”,但它可能不会立即被获取。我们将在本书的后面看到如何解决这个问题,因为它是在所有 Web 应用程序中都要解决的问题。
  4. ^ 还有一个简短的 PHP 开启标签 (<? ... ?>)。但是,它不能保证在所有系统上都启用。此外,如果启用,它可能会干扰 XHTML 文档。(XHTML Proper 必须以 <?xml...?> 开头,PHP 将 <? 视为简短的开始标签。)有关更多信息,请参阅 XHTML 附录
  5. ^ PHP header 函数用于向 Web 浏览器发送任何 HTTP 标头。此函数必须在程序中的任何其他输出之前使用。它是一个非常流行的函数,我们将在本书的后面看到更多关于它的内容。
  6. ^ JavaScript 是一个稍微复杂一点的主题,因为它在客户端(在用户的 Web 浏览器中)运行。但是,你可以在不使用 JavaScript 的情况下编写完美的 Web 应用程序。我们将在后面介绍 JavaScript,在我们掌握 PHP 和 HTML 编程中的不同编程概念之后,因为许多概念将会延续。


华夏公益教科书