Logo
Section 1 / 2

将流畅的字符串对象转换为字符串

了解将流畅字符串对象转换为字符串的过程。

导入

将流畅的字符串对象转换为字符串

了解将流畅字符串对象转换为字符串的过程。

在整个课程中,我们会看到“可字符串化对象”或“流畅字符串”的引用。流畅字符串是 Laravel 字符串辅助函数的面向对象封装,它提供了一种便捷且自然的 API 来使用这些方法,并附带了一些额外功能。

当我们看到“流畅”这个词时,尤其是在 Laravel 及其生态系统中的上下文中,通常指的是一个允许在同一个对象实例或同类型新实例上持续链式调用方法的对象。日常使用场景包括查询构建器、请求构建器等。

流畅字符串 API 与标准方式的对比

为了比较和区分流畅字符串 API 与传统的基于方法调用的方式,我们可以参考以下示例:

1<?php 2 3use Illuminate\Support\Str; 4 5$string = 'This is an input string.'; 6 7// 直接使用字符串辅助函数。 8$value = Str::lower($string); 9$value = Str::limit($value, 10); 10 11// 使用流畅字符串。 12$value = (string) str($string)->lower()->limit(10);

从上述代码可以看出,使用流畅字符串时,我们无需反复引用 Str 类,可以连续根据前一个方法的结果调用后续方法。在这个例子中,我们还看到了 str 函数(全小写),可以在任何地方用来创建新的流畅字符串对象实例。

我们也可以在 Str 类上使用 of 方法来创建这些流畅字符串对象:

1<?php 2 3use Illuminate\Support\Str; 4 5$string = 'This is an input string.'; 6 7$value = (string) Str::of($string)->lower()->limit(10);

流畅字符串的一个显著特点是它们能够将动态属性访问代理到方法调用。这句话听起来有些复杂,但它的意思是:我们可以对流畅字符串调用方法时,无需像常规方法调用那样加上括号:

1<?php 2 3// 返回 "this_is_an_input_string" 4(string) str('This is an input string.') 5 ->lower->snake;

不过需要注意的是,如果需要向方法传递参数,则仍需使用完整的语法。对于那些定义了参数的方法,当我们使用属性代理方式时,会使用这些参数的默认值。

来自其他语言(如 C# 或 Java)的开发者可能会注意到,Laravel 的流畅字符串对象与“字符串构建器”的概念非常相似。虽然与对象交互的 API 类似,但必须强调的是,这些系统在内部行为上有很大差异,主要是因为 PHP 内部处理字符串的方式不同。

在其他运行时环境(如通用语言运行时 CLR 或 Java 虚拟机 JVM)中,使用平台自带的字符串构建器确实能带来性能优势。然而,PHP 内部对字符串的管理已经高度优化,在绝大多数使用场景下,引入类似的概念并无实际收益。

按下“运行”按钮后,可以看到如下输出结果:

No configuration found for ID: d42a99ebb7b8075e112adfd4904d85e093a9f52de892686d909e05808a7442d7

将流畅字符串转换为实际字符串

有多种方式可以将流畅字符串实例转换为实际字符串。第一种方法是完全不必担心,让 PHP 自动将对象强制转换为字符串。例如,下面的代码会将一个流畅字符串实例传给 mb_strlen 函数:

1<?php 2 3// 输出 24 4echo mb_strlen(str('This is an input string.'));

流畅字符串实现了 PHP 的 __toString 魔术方法,使对象能够告诉 PHP 如何将其转换为字符串。当显式将流畅字符串实例转换为字符串时,PHP 也会使用该方法:

1<?php 2 3echo $value = (string) str('This is an input string.');

我们还可以在流畅字符串实例上调用 toString 和 value 方法来获取字符串值:

1<?php 2 3$value = str('This is an input string.')->toString(); 4 5$value = str('This is an input string.')->value;

以下是流畅字符串实例中 toString 和 value 方法的实现示例:

No configuration found for ID: e5e20db36f424cf77425c23edfb6a1026499f77fc1fb2fdb10a01156fbeac1b3

什么是字符串?

条件字符串逻辑