Web开发 #4:后端PHP





5.00/5 (4投票s)
(期待已久的)Web 开发系列文章第四篇。
想我了吗?我上次写博客已经有一段时间了(大约三个月)。我一直忙着搬新家,并在新工作中快速适应。做了很多好事,但没有写博客。嗯,今天我将重新开始,我将假装是三个月前,继续这个系列。
- Web 开发 #1:互联网和万维网
- Web 开发 #2:使用 HTML 创建我们的第一个网站
- 网页开发 #3:使用 CSS 3 美化页面
- Web开发 #4:后端PHP
- Web 开发 #5:使用 HTML 表单进行用户输入
- Web 开发 #6:使用 JavaScript 进行交互
- Web 开发 #7:使用 AJAX 进行动态页面更新
- Web 开发 #8:下一步何去何从
所以在之前的章节中,我们使用 HTML 和 CSS 创建了一个网页。我们实际上可以使用它们构建非常漂亮的网站,但我们仍然会遇到一些麻烦。如果我们想向我们的网站添加内容怎么办?我们每次都必须编辑我们的 HTML。如果我们想以多种语言显示我们的网站怎么办?如果我们希望用户能够向网站添加内容(例如博客)怎么办?换句话说,我们希望我们的内容是动态的。仅使用 HTML 和 CSS 是不可能做到这一点的。我们需要更多。我们需要在后端创建 HTML 的东西。
对于这篇博文,我假设您熟悉 HTML 和 CSS(您可以在我之前的博文中阅读),并且您之前使用过一些编程语言,最好是基于 C 的语言,例如 C# 或 Java。
PHP 简介
所以我们的后端只是一个监听请求的服务器。每当请求进来时,我们都希望处理它并发送响应(例如 HTML 网页)。我们可以使用各种工具和语言来处理这些请求,但对于本文,我使用的是 PHP。
为什么选择 PHP?首先它是免费的。其次,它是最流行的网络语言之一,并且已经存在了很长时间。它拥有庞大的社区以及大量的文档和教程。第三,几乎所有的网络主机,甚至是免费的,都支持 PHP。其他语言,例如 C#,并非总是受支持。最后,但并非最不重要的一点是,PHP 相当容易学习,因为它可能非常轻量级。实际上,我只是在 Notepad++ 中编写我的 PHP。
PHP 是由 Rasmus Lerdorf 在二十年前,即 1995 年创建的。当时 PHP 代表 Personal Home Page(个人主页)。他们将其更改为 PHP: Hypertext Preprocessor(超文本预处理器),使其成为一个递归缩写(因为第一个 P 代表 PHP,而它的第一个 P 又代表 PHP,它的第一个 P 又代表 PHP……)。很聪明,不是吗?无论如何,PHP 是一种脚本语言,这意味着它是解释执行而不是编译执行。它也是过程式的、面向对象的、弱类型的,并且具有 C 语言风格的语法。废话少说,开始编码吧!
设置你的环境
不幸的是,我们还不能开始编码。请记住,您的浏览器会渲染 HTML 和 CSS。它还可以运行 JavaScript(我将在另一篇博文中讨论),但它无法执行 PHP 文件。通常,您的服务器会处理 PHP 执行。您很可能没有可用的 Web 服务器。幸运的是,您可以将您的 PC 配置为 Web 服务器。
为此,只需安装 Web 服务器软件。您有几种选择,但我选择 XAMPP。您可以在此处下载 XAMPP,然后简单安装它(选择所有默认选项,如果您知道自己在做什么,也可以更改它们)。安装完成后,XAMPP 将要求您启动 XAMPP 控制面板。启动它,您将看到一个选项列表。我们需要 Apache,所以只需启动它。现在启动您最喜欢的浏览器并导航到 https://。您应该会看到一个 XAMPP 页面。恭喜,您刚刚安装了一个(本地)Web 服务器,现在可以运行 PHP 文件了!
要检查它是否真的有效,请创建一个新的文本文件并将其命名为“hello.php”。在文件中放置以下文本
<?php
echo "Hello, PHP!";
?>
现在转到 XAMPP 的安装文件夹(您可以使用 XAMPP 控制面板中的“Explorer”按钮快速导航到该文件夹),找到 htdocs 文件夹并将您的 hello.php 文件放在那里。现在,在您的浏览器中,导航到 https:///hello.php。您应该会看到文本“Hello, PHP!”。现在我们已经完成了强制性的 Hello World 示例,让我们开始编写一些真正的 PHP。
学习语法
那么让我们首先看一些基本的 PHP 语法。基本上,您将编写一个包含一些 PHP 的 HTML 页面。PHP 将创建一些表示更多 HTML 的文本。要表明您将使用 PHP,请使用 <?php 开标签;要表明您已完成 PHP,请使用 ?> 闭标签。您在前面的示例中已经看到了这一点。
echo 或 print 语句将您的代码输出到 HTML。在上面的示例中,它创建了 HTML“Hello, PHP!”,这只是一些文本。但我们可以让它 echo “<h1>Hello, PHP!</h1>”,这样我们就会在页面上得到一个标题。
正如我提到的,PHP 是弱类型或松散类型的。这并不意味着 PHP 没有类型,而是意味着变量在代码执行时可以改变其类型。这也意味着您可以将 3 添加到“3”中,结果可能是 6 或“33”,因此在使用弱类型语言时需要小心(实际上 PHP 在添加时总是将文本转换为数字)。
那么 PHP 中有哪些类型呢?首先,我们有用于没有小数部分的数字的 int(所以 1、8、42 和 986 是有效的整数,1.12 不是)。其次,有 float 或 double,用于有小数部分的数字。然后我们有 boolean 或 bool 用于简单的 true 或 false。接下来是用于文本(或字符数组)的 string。然后我们有 array,或者是一个基于 0 索引的项目集合。还有 object 类型,它封装了状态和行为。最后,实际上是字面意义上的最少,有 NULL 表示没有任何值。
如果您之前使用过其他语言,这没什么特别的。
那么我们如何使用这些类型呢?通常我们会将它们存储在变量中。那么我们如何声明变量呢?我们实际上不需要… 只需给某个变量赋值,它就会突然出现。这是一种魔法!变量总是以 $ 符号开头。典型的变量声明看起来像这样
$intVar = 42;
$floatVar = 3.142;
$boolVar = true;
$stringVar = "Some string"; // Double quotes.
$stringVarAltern = 'Alternative string'; // Single quotes.
$arrayVar = array('Pulp Fiction', 'Fight Club', 'Star Wars');
class person
{
public $name = NULL;
public $age = NULL;
}
$objectVar = new person();
$objectVar->name = 'Sander';
$objectVar->age = 27;
$nullVar = NULL;
除了 class 和 objectVar,这看起来很直截了当,对吗?但请注意,以下是完全合法的(PHP 是弱类型,记得吗?)
$stringVar = 'Some string';
$stringVar = 42;
现在,这是您确实需要注意的事情。
关于字符串还有一些。你看,你可以用单引号或双引号声明一个字符串。嗯,双引号字符串是解释过的字符串,这意味着你放在里面的任何变量名都会在字符串打印之前被评估。如果你需要连接字符串,你可以使用`.运算符`。
$hello = 'Hello';
echo '$hello world!'; // Outputs $hello world!
echo "$hello world!"; // Outputs Hello world!
echo "$helloish world!"; // Error, $helloish is undefined!
echo "{$hello}ish world!"; // Outputs Helloish world!
echo 'Conc' . 'aten' . 'ate!'; // Outputs Concatenate!
另一件可能会让你惊讶的事情是,PHP 可以将任何东西都视为布尔值!任何非默认值都为 true,而所有默认值都为 false,这也称为真值和假值。下一个示例使用if/else 语句来演示这一点。尝试玩玩看。
if ("Hello") // Try 0, '', '0', 0.1, NULL and array().
{
echo "Yep...";
}
else
{
echo "Nope!";
}
我还向您展示了一个 if/else 语句。让我们也看看一些循环。
$movies = array('Pulp Fiction', 'Fight Club', 'Star Wars');
for ($i = 0; $i < count($movies); $i++)
{
echo "$movies[$i] <br>";
}
foreach ($movies as $movie)
{
echo "$movie <br>";
}
现在这里实际上发生了一些事情!首先我们初始化一个数组,我们之前已经看到过。现在在第一个 for 循环中,我们首先声明我们的计数器变量 $i,然后我们进行布尔测试以检查是否需要再循环一次,最后我们在每次迭代后进行更新(递增 $i)。在布尔检查中,我们还使用 count(array) 函数来检查数组中是否还有更多元素。理想情况下,您会在语句之外执行此计数,这样它只执行一次。
第二个循环更具可读性。我基本上说的是“对于数组 $movies 中的每个元素,我将称之为 $movie,执行此操作……”。现在在循环体中,您可以使用 $movie 变量自由使用当前元素。
还有 do 循环和 while 循环,但我不会在这里讨论它们。对于程序员来说,这应该不是什么新鲜事!
编写页面
现在让我们编写一个完整的页面。通常你会有一个数据库,比如 MySQL,正在运行,但这对于这篇文章来说有点大材小用了。所以我们将从文本文件中读取文本行并将它们显示在页面上。你会发现你可以更新你的页面而无需实际修改你的 HTML 或 PHP 文件。
那么让我们首先以我最喜欢的电影为例。我们将把我们最喜欢的电影放在一个文本文件中,并在我们的页面上打印它们。因此,创建一个新的 PHP 文件,将其命名为 movies.php,并将其放入 hpdocs 文件夹(在您的 XAMPP 文件夹中)。现在创建一个名为 movies.txt 的文本文件,并将其与您的 PHP 文件一起放入 htdocs 文件夹中。您可以在文本文件中放入一些电影名称。每个名称都单独一行(我称之为电影,但任何值都可以,当然)。
在这个例子中,我将使用一个无序列表。我还没有展示过,但 HTML 如下:
<ul> <!-- Unordered List -->
<li>Some item</li> <!-- List item -->
<li>Another item</li>
<li>Third item</li>
<li>etc...</li>
</ul>
你也可以使用有序列表,在这种情况下,你会使用 <ol> 标签而不是 <ul> 标签。
所以您的 PHP 文件可能看起来像这样(不包括 !DOCTYPE、html、header 和 body 标签)
<h1>My favourite movies!</h1>
<p>
<?php
if (file_exists('movies.txt'))
{
echo '<ul>';
$lines = file('movies.txt');
foreach ($lines as $line)
{
echo "<li>$line</li>";
}
echo '</ul>';
}
else
{
echo 'No favourite movies found!';
}
?>
</p>
因此,我们首先使用 PHP 函数 file_exists(string) 检查 movies.txt 文件是否存在。如果不存在,我们只会显示“未找到收藏电影!”,但如果存在,我们将创建一个无序列表,并使用 file(string) 函数读取文件内容。 file(string) 函数读取文件中的所有行并将它们放入一个数组中。还有更多用于文件操作的函数,但我不在此处讨论。接下来,我们遍历刚刚从文件中获取的行。对于每一行,我们都会向 HTML 追加一个列表项元素。处理完所有行后,我们关闭无序列表。
这就是我们的页面!您可以通过导航到 https:///movies.php 来查看它。您可以使用一些 CSS 使其看起来更漂亮,并且您可能还需要添加一些内容。
现在想象一下你会从数据库中得到这些?很酷,对吧!
函数
现在,有时您有一些想要重用的代码。假设我们想根据另一个文件创建另一个无序列表。规则相同,只是我们可能没有电影,而是想显示歌曲。我们可以为此创建一个函数,并将文件名作为参数传递。那么让我们看看如何将上面的代码放入一个函数中。在页面顶部放置以下内容
<?php
function fileAsUnorderedList($fileName, $notFoundMessage)
{
if (file_exists($fileName))
{
echo "<ul>";
$lines = file($fileName);
foreach ($lines as $line)
{
echo "<li>$line</li>";
}
echo "</ul>";
}
else
{
echo $notFoundMessage;
}
}
?>
如您所见,我们定义了一个与我们之前的代码相同的函数,只是文件名和文件未找到时的消息作为参数传入。现在我们如何调用它呢?
<h1>My favourite movies!</h1>
<p>
<?php
fileAsUnorderedList('movies.txt', 'No favourite movies found!');
?>
</p>
<h1>My favourite music!</h1>
<p>
<?php
fileAsUnorderedList('music.txt', 'No favourite music found!');
?>
</p>
看!现在您可以将第二个文本文件添加到 htdocs 文件夹中,您最喜欢的音乐将与您的电影一样显示。您仍然在这里看到几乎相同的代码,因此我们可以更改我们的函数并使其做更多的事情,或者我们可以创建第二个函数来为我们创建标题和段落。
那如果你想在其他页面上使用这个函数呢?只需将函数放在一个单独的文件中,并在你想使用该函数的 PHP 文件中包含以下代码行。
<?php include("MyFunctions.php"); ?>
如果你想进一步组织你的代码(你肯定会想),你就必须使用对象和命名空间。你之前已经看到过一个关于对象的小例子,我在这里就不多说了。不过,要小心直接将函数放在你的文件中。如果两个你想包含的文件包含相同的函数(或变量),怎么办?!你就会遇到问题。使用对象和命名空间有助于防止这种情况发生。
所以,这是对 PHP 的一个非常简短的介绍。可能比它应得的还要短。PHP 拥有大量的函数、库、第三方工具以及一个庞大而活跃的社区。如果你想了解更多关于 PHP 的知识,我建议你从 Google 搜索教程或阅读相关书籍开始。不过,现在你已经使用服务器端语言创建了第一个具有动态内容的网站!在我的下一篇文章中(不会再花我三个月时间),我们将研究如何将数据从我们的网站发送到服务器,以便我们可以使用页面将电影或音乐添加到文本文件中。
敬请期待!
文章 Web 开发 #4:PHP 后端 最初发表于 Sander 的点滴。