2023-09-02

深入探索WordPress中的面向对象编程:控制结构II


深入探索WordPress中的面向对象编程:控制结构II

如果您一直在跟踪我们整个系列,那么您无疑知道我们正在从初学者的角度研究面向对象编程的概念。

具体来说,我们正在为那些想要熟悉范例以及如何在 WordPress 上下文中应用这些概念的人查看该主题;但是,在我们开始使用面向对象编程和 WordPress 之前,我们必须使用 PHP 提供的基本功能奠定基础。

最终,我们致力于通过创建 WordPress 插件来创建面向对象编程的实际示例。但在此之前,我们还需要讨论一些事情。

如果这是您第一次阅读本系列,那么我建议您查看之前的文章,因为本系列中的每篇文章都建立在前一篇文章的基础上。另一方面,如果您更熟悉面向对象编程,那么当我们开始实际应用这些想法时,您可能需要重新访问该系列。

到目前为止,我们已经讨论了以下主题。

  1. 简介
  2. 课程
  3. 类型
  4. 控制结构:条件语句

在本文中,我们将通过查看 PHP 提供的各种类型的循环来结束对控制结构的讨论。

控制结构回顾

如果您读过上一篇文章,那么您会记得“控制结构”是指语言(在我们的例子中为 PHP)提供的结构,它允许我们根据数字修改整个程序中的代码。条件。

在上一篇文章中,我们研究了如何通过使用条件语句来做到这一点,这些语句将强制程序根据条件(例如,如果设置了一个变量,如果条件为真,依此类推)。

循环

但这并不是我们拥有的唯一控制类型。除了条件之外,我们还能够迭代(或循环)数据集,以便我们可以对数据集中的每个项目采取操作。我们可以添加数据、删除数据、显示数据、对数据排序等等。

例如,假设我们有一组数据,可能有 10 个帖子,并且我们想要循环并打印出每个帖子的标题和日期。循环允许我们做到这一点。

无论您想要做什么,PHP 提供了四种类型的循环,允许我们循环访问数据集。在本文中,我们将查看每个示例以及每个示例的一些细微差别,以便在开始编写面向对象代码时可以使用另一组控制结构。

for 循环

由于编写代码方式的性质,for 循环通常被认为是最复杂的循环。它的流程读起来有点不自然。

通常,我们习惯于逐行编写代码,以便将每条指令设置在一行上;然而,对于 for 循环,我们有一个稍微不同的方法。首先,我将分享一个基本示例,我们将介绍它的各个方面,然后我们将研究更详细的方法。

下面是一个基本示例,它将数到 10,并在屏幕上显示每个数字:

for ( $i = 0; $i < 10; $i++ ) {
    echo $i;
}
登录后复制

在循环的第一行(在 for 语句后的括号内),我们执行以下操作:

  • 初始化变量 $i 并将其设置为零
  • 设置一个条件,以便在 $i 时继续运行
  • 每次迭代后将 $i 增加值 1(使用后增量运算符)

在循环体中,我们只是使用 PHP 的 echo 函数来打印 $i 的当前值。当循环处理指令时,我们将在屏幕上看到 0 – 9 的打印结果(因为我们从零开始运行,而 $i 小于 10)。

不同的人有不同的阅读代码的技巧,所以我要推荐的策略可能不是最适合你的,但是当我阅读这些类型的循环时,我通常会这样阅读:

$i 从零开始,当 $i 小于 10 时,执行循环体,然后将 $i 加 1。

问题是 $i 可以从任何值开始,可以计数到任意数量,并且可以按任何值递增。

我们对 for 循环做的工作越多,您就越有可能发现一些可以优化性能的东西。不过,目前,for 循环的基础知识已经介绍完毕,高级技术有点超出了本文的范围。

foreach 循环

foreach 循环与 for 循环类似,因为它们迭代数据集,但它们是按顺序执行的。这意味着没有简单的方法可以迭代列表中的每一项(例如两个项目)(例如,可以使用 $i + 2 in for 循环)。

这种类型的循环可以说是最具可读性的。对于我们的示例,假设我们有一个数组,并且数据数组包含以下名称:Alpha、Bravo、Charlie、Delta、Echo 和 Foxtrot。数组的名称存储在名为 $names 的变量中。

在这种情况下,我们可以设置一个 foreach 循环来迭代名称并将每个名称显示在屏幕上,如下所示:

$names = array( 'Alpha', 'Bravo', 'Charlie', 'Delta', 'Echo', 'Foxtrot' );
foreach ( $names as $name ) {
    echo $name;
}
登录后复制

设置非常简单,不是吗?

正如我们在上一节中分享了一种读取初始 for 循环的方法一样,您可以通过以下方式读取 foreach 循环:

对于名称集合中的每个名称,将其显示在屏幕上。

或者,也许更一般地说:

对于集合中的每个元素,将其显示在屏幕上。

还有什么吗?

foreach 循环还有另一个方面,我们可能会在本系列后面更详细地介绍,但主要思想是,如果您熟悉关联数组,即数组使用键进行索引并且具有关联值,您可以设置 foreach 循环来检索循环每次迭代的每个键和值。

例如,假设我们有以下关联数组:

$heroes = array( 'alien' => 'Superman', 'human' => 'Batman' );
登录后复制

当使用这样的关联数组时,您还可以设置一个 foreach 循环,如下所示:

foreach ( $heroes as $type => $name ) {
    echo $name . ' is a ' . $type;
}
登录后复制

这将导致输出读取诸如“超人是外星人”之类的内容,因为“超人”是值,“外星人”是他的类型(或他的键)。

此循环的更通用形式如下:

foreach ( $collection as $key => value ) {
    // Work goes here
}
登录后复制

没什么特别复杂的。

while 循环

介绍了 for 循环的变体后,是时候将我们的注意力转向 while 循环了,其中有两种变体(尽管它们的名称不同:while 循环和 do 循环),但它们只有很小的区别。

但是在我们了解它们有何不同之前,我们先来看看 while 循环,它的基本格式、如何使用它以及它与之前的 for 循环。

首先,while循环的基本格式如下:

while ( condition ) {
    // do work
}
登录后复制

请注意,此循环与之前的循环不同,它接受条件作为初始语句的一部分(这就是我们在上一篇文章中介绍条件的原因)。

循环的工作原理是首先检查条件是否为真,执行循环体中的代码块,然后再次检查条件。这意味着 while 循环可以执行任何工作单元,只要指定的条件计算结果为 true。

所以,当然,您可以迭代数字列表,运行数据集合,但您也可以在布尔值仍然为 true 的情况下执行某些操作。一旦标志达到 false,则 while 循环将终止。

让我们看一个从数组中弹出元素的示例。假设初始数组有 100 个元素,我们将一直这样做,直到数组剩下 50 个元素:

while ( 50 !== count ( $elements ) ) {
    array_pop( $elements );
}
登录后复制

这里,条件将继续评估为 true,直到 $elements 数组中的项目数减少到 50 项。

正如我们对之前的循环所做的那样,这是读取 while 循环的一种方法:

当这个条件成立时,执行以下代码。

当然,代码看起来就是这样,不是吗?

do 循环

最后,do 循环几乎完全类似于 while 循环,只不过在检查条件之前至少会迭代一次。

在看示例之前,先介绍一下 do 循环的基本结构:

do {
    // do work
} while ( condition );
登录后复制

比较清楚,对吧?

因此,让我们设置一个非常基本的示例,其中创建一个数组并仅用偶数填充它。为此,我们需要:

  • 保存数字的数组
  • 一个变量,用于保存我们迭代前 100 个偶数的次数

话虽如此,我们可以将代码设置为如下所示:

$i = 1;
$even_numbers = array();

do {

    if ( 0 === ( $i % 2 ) ) {
        $even_numbers[] = $i;
    }
    
    $i++;

} while ( $i <= 100 );
登录后复制

最后,与其余循环一样,您可以通过以下方式读取这些类型的循环:

执行以下工作块,然后检查以下条件是否为真。如果是这样,请继续完成工作。

还有什么吗?

当谈到 do 循环时,如果您正在使用集合,则需要在处理集合之前确保该集合为空,因为它将在检查条件是否为真之前执行循环块中的代码。如果您尝试处理空数据集,这可能会导致错误。

当然,如果您打算这样做,那么其他循环之一可以更好地针对这种操作进行优化。

只有当您有一组数据或者您要执行一个您知道在检查之前需要至少执行一次的过程时,才使用 do 循环指示应执行的执行次数的条件。

下一步是什么?

通过这些内容,我们已经列出了开始讨论面向对象编程的函数、属性、范围和其他基础方面所需要做的一切。

对于那些认为本系列或多或少介绍了一些 PHP 编程基础知识的人来说,我们将在下一篇文章中开始进入稍微更高级的领域。

以上就是深入探索WordPress中的面向对象编程:控制结构II的详细内容,更多请关注php中文网其它相关文章!

https://www.php.cn/faq/601066.html

发表回复

Your email address will not be published. Required fields are marked *