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
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~