支持Laravel.io的持续发展 →

如何在Laravel中变得流利

Laravel的熟练度可以采取多种形式。其中之一就是使用隐藏在Laravel框架内部的Fluent类。

Fluent类是Laravel框架提供的一个实用类,允许您流畅地创建和操作对象。这意味着您可以用更易于理解和阅读的方式连接方法调用和属性分配,而不需要嵌套长时间的方法调用或使用复杂的数组。

当您构建具有许多属性的复杂对象时,Fluent类非常有用,它允许您更简洁、更直观地设置和操作这些属性。当使用点符号而不是数组符号访问对象属性时,它也非常有用。

总的来说,Fluent类是处理Laravel中对象的关键工具,它广泛应用于整个框架,以提供一种更易于阅读的方式来处理数据。本文将探讨如何使用Fluent类在Laravel中创建和操作对象。

目录

介绍

  • PHP Laravel中Fluent类的定义
  • 说明其目的和用途

关联数组的缺点是什么

创建Fluent对象

  • 如何使用make方法创建Fluent对象
  • 如何使用现有的数组创建Fluent对象
  • 如何使用现有的对象创建Fluent对象
  • 如何使用with()方法向Fluent对象添加额外的属性
  • 如何使用Fluent API创建Fluent对象

操作Fluent对象

  • 如何使用点表示法访问Fluent对象的属性
  • 如何设置Fluent对象的属性

结论

  • 总结PHP Laravel中Fluent类的作用和用途

关联数组有什么问题?

关联数组是存储常见于PHP应用程序中的键值对的有用数据结构。

让我们用一个例子来看看如何使用关联数组来存储产品记录。

$product = [
    'id'    => 1,
    'name'    => 'Nike Air Force 1',
    'price'    => 50000, // cents
];

您可以使用以下语法访问任何属性

echo $product['name'];

这一行打印出产品的名称。

现在让我们尝试访问此数组上不存在的一个属性

echo $product['sku'];

sku属性不在此数组上。在这种情况下,PHP抛出一个带有此消息的ErrorException异常

Undefined array key 'sku'

让我们再看一个例子。假设我们将产品定义为stdClass实例,而不是关联数组。

$product = (object) [
    'id'    => 1,
    'name'    => 'Nike Air Force 1',
    'price'    => 50000, // cents
];

现在,让我们尝试访问产品名称

echo $product['name'];

您正在尝试使用数组表示法访问stdClass实例上的一个属性。在这种情况下,PHP抛出错误异常,并显示此消息

Cannot use object of type stdClass as array

使用关联数组或在对象与数组混合时可能会有风险,并且可能效率不高。

有没有一个通用的API可以访问数组和对象,而不用担心异常或无效语法的使用呢?没问题;Fluent类是Laravel框架的一部分。

创建Fluent对象

在某些情况下,使用Fluent类比使用关联数组更方便。它允许您使用点表示法而不是数组表示法来访问对象属性。

Fluent类定义在Illuminate\Support命名空间内。

<?php


namespace Illuminate\Support;

class Fluent implements Arrayable, ArrayAccess, Jsonable, JsonSerializable
{ }

它实现了Arrayable, ArrayAccess, Jsonable,JsonSerializable接口。使用Fluent类,您可以使用数组和点表示法语法来访问属性。

让我们看看几个Fluent类的使用例子。

如何使用make方法创建Fluent对象

要定义Fluent类的新实例,您可以使用以下格式的make()方法

$product = new Fluent::make([
    'id'    => 1,
    'name'    => 'Nike Air Force 1',
    'price'    => 50000, // cents
]);

然后您可以按如下方式访问属性

echo $product->name;

// or

echo $product[‘name’];

请注意,我们可以使用数组的访问形式或点表示法形式。

如何使用现有的数组创建Fluent对象

除了使用make()方法创建Fluent类的实例之外,您还可以使用Fluent类构造函数包装现有的数组,如下所示

$data = [
    'id'    => 1,
    'name'    => 'Nike Air Force 1',
    'price'    => 50000, // cents
];

$product = new Fluent($data);

然后您可以像这样访问属性

echo $product->name;

// or

echo $product[‘name’];

如何使用现有的对象创建Fluent对象

Fluent类也可以包裹对象,而不仅仅是可以包裹数组。以下是一个示例

$data = new Product(
    	id: 1,
    	name: 'Nike Air Force 1',
    	price: 50000, // cents
);

$product = new Fluent($data);

然后这样访问属性

echo $product->name;

// or

echo $product[‘name’];

请注意,我们可以使用数组的访问形式或点表示法形式。

如何使用with()方法向Fluent对象添加额外的属性。

假设您正在将现有数组包裹在新实例化的Fluent类中,并想添加额外的数据。在这种情况下,您应该使用with()方法

$data = new Product(
    	id: 1,
    	name: 'Nike Air Force 1',
    	price: 50000, // cents
);

$product = new Fluent($data)->with('sku', '123AVC');

$product对象现在有四个属性,包括sku

如何使用Fluent API创建Fluent对象

创建Fluent类实例的第三和最后一种方法是使用以下格式的Fluent API

$product = (new Fluent)
->id(1)
    	->name('Nike Air Force 1')
    	->price(50000);

并且您通常可以像访问任何Fluent类实例一样访问它。

在Fluent对象上访问不存在的属性

我们之前看到,当您在一个关联数组上访问不存在的属性时,PHP会抛出一个ErrorException异常。

您认为当您在一个Fluent对象上访问不存在的属性时会发生什么吗?

$product->created_at;

上面的行返回null。不会抛出异常。

您可以从Fluent类和关联数组、对象之间的价值中看到。

操作Fluent对象

您可以使用Fluent对象不仅访问属性,还可以设置属性的值。

您有两种设置属性值的方法:数组语法或点表示法。让我们看看一个例子


$data = new Product(
    	id: 1,
    	name: 'Nike Air Force 1',
    	price: 50000, // cents
);

$product = new Fluent($data);

$product['price'] = 60000;

// or

$product->price = 60000;

您还可以使用PHP标准库中的unset()方法来取消设置属性的值。

unset($product[‘price’]);

// or

unset($product->price);

结论

PHP Laravel 中的 Fluent 类是一个工具类,允许开发者以更易读和更富有表现力的方式创建和操作对象。当处理具有许多属性的对象时,这非常有用,可以简洁地设置和操作。 Fluent 类可以通过 make 方法、现有的数组或对象或 fluent API 创建。可以通过点符号访问和设置其属性来操控它。

总的来说,Fluent 类是处理 Laravel 对象的必要工具,并且在框架的很多部分中广泛使用,以提供更富有表现力和易读性的数据处理方式。

上次更新 1 年前。

driesvints, peterfox, mostafa-amine, lupete, highfishmarket, maddychennupati, duwscan 喜欢了这篇文章

7
喜欢这篇文章吗?让作者知道,并给他们“鼓掌”!
bhaidar (Bilal Haidar) 嗨,这里是 Bilal,Let's Remote 的创始人兼首席执行官。我是一位经验丰富的 Web 开发者,拥有 16 年以上的经验。Laravel 是我的主要工作。

你可能还会喜欢这些文章

2024年3月11日

如何使用 Larastan 将 Laravel 应用从0到9进行优化

在 Laravel 应用执行之前找到错误是可能的,归功于 Larastan...

阅读文章
2024年7月19日

无需 traits 的情况下标准化 API 响应

我注意到大多数用于 API 响应的库都是使用 traits 实现的...

阅读文章
2024年7月17日

在 Laravel 项目中通过 Discord 通知收集反馈

如何在 Laravel 项目中创建反馈模块,并在收到消息时通过 Discord 通知...

阅读文章

我们感谢这些 极佳的公司 对我们的支持

您的标志在这里?

© 2024 Laravel.io - 版权所有。