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 的单继承语言而准备的一种代码复用机制。
- Trait 能够把模块化的实现方式注入多个无关的类中
- 从而提高代码复用
- 符合 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)