卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章17351本站已运行3326

WordPress中的面向对象编程:控制结构I

WordPress中的面向对象编程:控制结构I

对于那些迄今为止一直关注本系列的人来说,您知道我们正在专门从初学者的角度来研究面向对象编程。

这意味着我们不仅针对那些正在研究如何开始使用该范式的人来探讨该主题,而且我们正在研究构成该语言并最终实现的 PHP 的所有各种功能。在面向对象编程的上下文中使用。

此外,我们正在 WordPress 的背景下完成所有这些工作,以便在本系列结束时,我们可以看到如何在现实世界的示例中使用所有这些内容的实际应用。 p>

如果这是您第一次阅读该系列中的文章,那么我强烈建议您查看以前的文章,因为本系列中的每篇文章都建立在之前的文章的基础上。

到目前为止,我们已经介绍了以下内容:

  1. 简介
  2. 课程
  3. 类型

在本文中,我们将讨论控制结构。

什么是控制结构?

“控制结构”是一个奇特的术语,它描述了我们如何,咳咳,根据多种因素控制代码如何流经我们的程序。

例如,假设我们想要执行一组特定的指令,但您想要在设置了一个变量或设置了另一个变量的另一组指令时执行某些操作。

或者假设您有一组数据,您想要循环读取每个值、设置每个特定值,甚至创建特定值。

无论情况如何,执行此操作的方法都是通过使用控制结构。在本文的其余部分中,我们将介绍两种类型的控制结构:条件和循环。

虽然条件和循环是我们将要讨论的控制结构类型,但每种类型都有子集。

例如,条件语句有:

  • if/then 语句
  • switch/case 语句

另一方面,循环还有一些其他变体:

  • for
  • foreach
  • do
  • while

尽管这些对于某些人来说可能是新的构造,但我们已经在之前的文章中介绍了基础知识,因此我们拥有前进所需的一切。

条件语句

在我看来,条件语句是最容易理解的语句,因为它们比许多其他类型的编程语句读起来更像句子。例如,如果您字面意思是“如果此条件为真,则执行此操作;否则,执行此操作。”

当然,如果您在决定采取行动之前还需要检查一些其他条件,那么事情会变得稍微复杂一些,但其要点仍然是相同的。

话虽如此,让我们首先看一下 PHP 提供的两种条件变体之一。

if/then 语句

正如前面提到的,最基本的条件语句的形式是if/else,你通常会看到这样的写法:

'
<?php

if ( condition ) { 
    // Take on action
} else {
    // Take another action
}

当然,这仍然不能真正解释控制结构是如何工作的,不是吗?我的意思是,当然,它提供了一些如何查看它的框架,但它还有更多不足之处。

也就是说,这个条件行是什么?其次,控制结构可以采取哪些行动方案?

首先,条件指的是任何可以被计算为布尔表达式的语句。合理?简而言之,条件代表任何可以被评估为 truefalse 的语句。

例如,假设我们有两个值:

  1. $is_active
  2. $total_count

这些显然是一些通用值,但假设如果 $is_active 设置为 true,那么我们会将 $total_count 加一;否则,我们会将 $total_count 减一。

代码如下:

'
<?php

$is_active = true;
if ( $is_active ) {
    $total_count = $total_count + 1;
} else {
    $total_count = $total_count - 1;
}

在上面的示例中,$total_count 将加一,因为 $is_active 计算结果为 true。

或者,假设 $is_active 设置为 false

'
<?php

$is_active = false;
if ( $is_active ) {
    $total_count = $total_count + 1;
} else {
    $total_count = $total_count - 1;
}

在此示例中,$total_count 将减一,因为 $is_active 的计算结果为 false。

现在,在我们查看下一个示例之前,重要的是要了解这些都是极其琐碎的示例。这些示例的目的不是展示如何进行复杂的操作并将它们组合到条件构造中,而是展示如何使用条件构造。

当我们进入本系列中开始编写插件的部分时,您将看到如何在实际应用程序中使用更复杂的表达式。

话虽如此,让我们再看一个 if/then 语句的示例。在此示例中,我们将查看 if/elseif/else。首先,我们假设 $is_active 设置为 true,并且 $total_count 设置为 10。

'
<?php

$is_active = false;
$total_count = 10;

if ( $is_active ) {
    $total_count = 1;
} else if ( $total_count >= 10 ) {
    $total_count = $total_count + 1
} else {
    $total_count = $total_count - 1;
}

上面的代码可以这样理解:

  • 如果 $is_active 设置为 true,则将 $total_count 设置为 1。 $is_active 不正确。
  • 否则,如果 $total_count 大于或等于 10,则将 $total_count 加 1。 $total_count 等于 10,因此我们将 $total_count 增加到 11。
  • 如果 $total_count 不大于或等于 10,那么我们会将 $total_count 减 1。

当上面示例中的代码块执行完毕时,$total_count 将等于 11。

有道理吗?

这就是我们称之为控制结构的原因:这些语句(或评估)使我们能够根据某些条件确定要运行哪些代码。

对于那些已经编程了一段时间的人来说,您应该熟悉使用 &&|| 等运算符的更复杂的表达式。我们最终会讨论这个问题,但不是在本文中。

总而言之,这是我知道的一个主题,我们将讨论该主题,但不是今天。

还有什么吗?

对于那些更有编程经验的人来说,您可能会熟悉三元运算符。

我们不会在这个特定的系列文章中讨论这一点,因为它超出了我们想要涵盖的范围;但是,如果您喜欢冒险,并且正在寻找一种更简洁的方法来编写简单的 if/else 语句,请查看 PHP 手册中的三元运算符。

switch/case 语句

话虽如此,在继续下一个主题之前,我们还需要了解另一种类型的条件条件。

这个特定的结构仍然属于条件语句;但是,我认为您会发现它的使用频率低于其 if/else 对应项。

如标题所示,这称为 switch/case 语句。尽管我个人认为该语言使其变得更加复杂,但控制流通过评估的方式与我们已经看到的没有太大不同。

就像我们对 if/else 语句所做的那样,我们首先看一下 switch/case 的结构,然后我们看一下几个简单的例子。

'
<?php
switch ( condition ) {

    case 'value':
        // do action
        break;
    
    case 'another value':
        // do a different action
        break;
        
    default:
        // perform a default action
        break;

}

关于这种特定类型的条件,首先要注意的是,评估发生在一个位置:在 switch 语句旁边的代码块顶部。 p>

这里,评估发生一次,然后每个后续 case 语句决定采取哪个操作。我们将讨论的每个语句中还包含一个 break 语句,并且在我们将要讨论的底部还有一个 default 代码块也在文章末尾进行讨论。

但在我们执行任何操作之前,让我们设置一个稍微更实际的示例,说明基本 switch/case 语句的样子。

假设我们有一个值 $first_name,然后我们希望根据此人的名字采取特定的操作过程。在此示例中,我们将根据某人的名字设置其电子邮件地址。如果我们无法识别该人的名字,那么我们会将值设置为 null

当然,这是一个有点做作的例子,但它会证明这一点:

'
<?php

$persons_name = 'Tom';
$email_address = '';

switch ( $persons_name ) {

    case 'Tom':
        $email_address = 'tom@acme-server.com';
        break;
    
    case 'David':
        $email_address = 'david@acme-server.com';
        break;
    
    default:
        $email_address = NULL;
        break;

}

让我们看一下上面示例中的控制流程:

  • 我们将 $persons_name 定义为“Tom”,并将 $email_address 初始化为空字符串。
  • 然后,我们将 $persons_name 传递给 switch 语句进行评估。
  • 控制结构将根据 case 语句中指定的每个值评估 $persons_name
  • 由于“Tom”是 $persons_name 的值,因此 $email_address 将设置为“tom@acme-server.com”李>

如果我们将“David”作为 $persons_name 传递,则 $email_address 将设置为“david@acme-server.com”。 p>

接下来,如果我们要传递除“Tom”或“David”之外的任何其他名称,则 $email_address 将设置为 NULL.还需要注意的是 switch/case 区分大小写。这意味着如果您传递“tom”而不是“Tom”,那么它们将被视为不同的情况。

最后,请注意每个 casebreak 语句结尾。这很重要,因为 break 指示代码跳出 switch/case 语句并继续处理接下来出现的任何代码。

了解这一点非常重要:如果您忘记了 break 语句,那么它将立即落入下一个 case 语句,这显然会产生不稳定的结果(例如设置错误的 $email_address)。

您可以利用这一点来发挥自己的优势的一个示例如下:

'
<?php

$persons_name = 'Tom';
$email_address = '';

switch ( $persons_name ) {

    case 'tom':
    case 'Tom':
        $email_address = 'tom@acme-server.com';
        break;
    
    case 'David':
        $email_address = 'david@acme-server.com';
        break;
    
    default:
        $email_address = NULL;
        break;

}

在上面的示例中,我们为“Tom”定义了小写或首字母大写的情况,并演示了代码如何进入下一个 case 语句。

但是有一个更好的方法可以让它更加防弹:

'
<?php

$persons_name = 'Tom';
$email_address = '';

switch ( strtolower( $persons_name ) ) {

    case 'tom':
        $email_address = 'tom@acme-server.com';
        break;
    
    case 'david':
        $email_address = 'david@acme-server.com';
        break;
    
    default:
        $email_address = NULL;
        break;

}

请注意,这需要 PHP 函数 strtolower 来强制传入的 $persons_name 完全小写。这使我们能够进一步完善我们的案例陈述。

接下来会发生什么?

在本文中,我们研究了 PHP 中可用的两组控制结构中的第一组。不,这些并不是面向对象编程的明确组成部分,但在我们真正开始讨论该范例的更多基础方面之前,我们需要了解允许我们编写面向对象代码的所有细节。

为此,我们将在下一篇文章中通过查看循环来继续讨论控制结构。

之后,我们就可以将注意力转向函数了。对于那些熟悉过程式编程的人来说,函数并不是什么新鲜事。但是,如果您是面向对象编程的新手,那么有许多因素可以将它们与过程编程中的使用方式区分开来。

这就是下一组文章的路线图。与往常一样,欢迎提供反馈,我期待在下一篇文章中继续我们的讨论。

卓越飞翔博客
上一篇: 如何使用Laravel的流畅查询构建器选择计数?
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏