laravel 基础面试题--2020-12-15-php-创建枚举(enum)-traits-迭代器yield

未匹配的标注

感谢关注本人公众号: 上海 PHP 自学中心
qq群(3年2万):517085546

laravel 基础面试题–2020-12-15-php-创建枚举(enum)-traits-迭代器yield

1. PHP 创建枚举

GITHUB地址

概述

枚举在每个项目中都有可能会被用到,在PHP中通常使用一组常量或一组静态变量来代替枚举。但在属性之间存在着组合或关联关系的复杂情景中,使用枚举会大大降低开发和维护成本。
PHP官方通过SPL类库已经为我们提供了枚举类SplEnum ,但首先你需要以扩展的方式安装它,其次它通常需要再次封装才能很好的使用。

此枚举类通过参考JAVA枚举 ,实现了一个简单易用但功能强大的枚举类库。

安装

composer require myclabs/php-enum

定义枚举

use MyCLabs\Enum\Enum;

/**
 * Action enum
 */
class Action extends Enum
{
    private const VIEW = 'view';
    private const EDIT = 'edit';
}

用例

$action = Action::VIEW();

// or with a dynamic key:
$action = Action::$key();
// or with a dynamic value:
$action = new Action($value);

2. Laravel 中为什么需要 Traits?

Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。

  1. Trait 能够把模块化的实现方式注入多个无关的类中
  2. 从而提高代码复用
  3. 符合 DRY(Don’t Repeat Yourself)原则。

参考原文: Trait 总结-用法-特点-坑-面试题划重点

3. 在 PHP 中 yield 是什么意思?

作用解释

解释此代码以及 yield 的作用:

function a($items) {
    foreach ($items as $item) {
        yield $item + 1;
    }
}

yield 关键字从生成器函数返回数据。生成器函数实际上是编写 Iterator 的更紧凑和有效的方式。它允许您定义一个函数,该函数将在您遍历该函数时计算并返回值。

因此,问题中的函数与以下内容的函数几乎相同:

function b($items) {
    $result = [];
    foreach ($items as $item) {
        $result[] = $item + 1;
    }
    return $result;
}

只有一个区别,a() 返回一个 generator,而 b() 只是一个简单的 数组。而且两者都可以被迭代。

优点

函数的生成器版本未分配完整的数组,因此对内存的需求较少。生成器可用于解决内存限制。由于生成器仅按需计算其 yielded 值,因此它们用于代替计算成本昂贵或无法一次性计算的序列很有用。


防爬虫说明

禁止 学习某地爬虫,知乎爬虫,CSDN 爬虫。
本文,首发在 learnku 社区。

@author
汪春波(www.shxdledu.cn)

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
wangchunbo
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~