65.9K
CodeProject 正在变化。 阅读更多。
Home

Web开发 #4:后端PHP

starIconstarIconstarIconstarIconstarIcon

5.00/5 (4投票s)

2015 年 2 月 14 日

CPOL

11分钟阅读

viewsIcon

27614

(期待已久的)Web 开发系列文章第四篇。

想我了吗?我上次写博客已经有一段时间了(大约三个月)。我一直忙着搬新家,并在新工作中快速适应。做了很多好事,但没有写博客。嗯,今天我将重新开始,我将假装是三个月前,继续这个系列。

  1. Web 开发 #1:互联网和万维网
  2. Web 开发 #2:使用 HTML 创建我们的第一个网站
  3. 网页开发 #3:使用 CSS 3 美化页面
  4. Web开发 #4:后端PHP
  5. Web 开发 #5:使用 HTML 表单进行用户输入
  6. Web 开发 #6:使用 JavaScript 进行交互
  7. Web 开发 #7:使用 AJAX 进行动态页面更新
  8. 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 不是)。其次,有 floatdouble,用于有小数部分的数字。然后我们有 booleanbool 用于简单的 truefalse。接下来是用于文本(或字符数组)的 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 的点滴

© . All rights reserved.