@@ -16,16 +16,16 @@ CodeIgniter 4 中的 **服务** 提供了创建和共享新类实例的功能。
1616
1717CodeIgniter 的所有核心类都以“服务”提供。这仅仅意味着,不是硬编码一个类名进行加载,而是在一个非常简单的配置文件中定义要调用的类。这个文件充当工厂的角色,用来创建所需类的新实例。
1818
19- 为什么使用服务?
19+ 为什么使用服务?
2020=================
2121
22- 一个快速的示例可能会使事情更清楚,所以想象一下,你需要获取 Timer 类的一个实例。最简单的方法就是简单地创建该类的一个新实例:
22+ 一个快速的例子可能会让事情更清晰,所以想象一下你需要引入一个 Timer 类的实例。最简单的方法可能就是直接创建这个类的一个新的实例:
2323
2424.. literalinclude :: services/001.php
2525
26- 这工作得很好。直到你决定要使用另一个定时器类来替换它。也许这个定时器类具有默认定时器不提供的一些高级报告功能 。为了做到这一点,你现在需要找到应用程序中使用了定时器类的所有位置。由于你可能已经将它们保留在那里以便持续运行性能日志,所以这可能是一个非常耗时且容易出错的处理方法 。这就是服务派上用场的地方。
26+ 这工作得很好。直到你决定用一个不同的计时器类来替代它。也许这个类有一些默认计时器不提供的高级报告功能 。为了做到这一点,现在你必须找到你应用程序中使用计时器类的所有位置。由于你可能已经将它们保留下来,以持续运行应用程序的性能日志,这可能是一个耗时且容易出错的处理方式 。这就是服务派上用场的地方。
2727
28- 与其自己创建实例,不如让一个中心类为我们创建类的实例。这个类非常简单。它只包含每个我们希望用作服务的类的方法。该方法通常返回该类的一个共享实例,并将它可能具有的任何依赖项传递给它 。然后,我们将用调用此新类的代码替换定时器创建代码:
28+ 我们不是自己创建实例,而是让一个中心类为我们创建类的实例。这个类保持非常简单。它只包含我们想要作为服务使用的每个类的方法。该方法通常返回该类的 ** 共享实例 **,并将任何它可能具有的依赖项传递给它 。然后,我们将替换我们的计时器创建代码,使用调用这个全局函数或服务类的代码:
2929
3030.. literalinclude :: services/002.php
3131
@@ -40,7 +40,7 @@ CodeIgniter 的所有核心类都以“服务”提供。这仅仅意味着,不
4040
4141.. literalinclude :: services/013.php
4242
43- ``$typography `` 是一个 Typography 类的实例, 如果你再次调用 ``\Config\Services::typography( ) ``, 你将会得到完全相同的实例。
43+ ``$timer `` 是一个 Timer 类的实例, 如果你再次调用 ``service('timer' ) ``, 你将会得到完全相同的实例。
4444
4545服务通常返回类的共享实例。下面的代码在首次调用时创建一个 ``CURLRequest `` 实例。第二次调用返回完全相同的实例。
4646
@@ -51,7 +51,7 @@ CodeIgniter 的所有核心类都以“服务”提供。这仅仅意味着,不
5151获取新实例
5252======================
5353
54- 如果你想获取 Typography 类的新实例,需要向参数 ``$getShared `` 传递 ``false ``:
54+ 如果你想获取 Timer 类的新实例,需要向参数 ``$getShared `` 传递 ``false ``:
5555
5656.. literalinclude :: services/014.php
5757
@@ -67,6 +67,8 @@ service()
6767
6868.. literalinclude :: services/003.php
6969
70+ .. note :: 自 v4.5.0 起,当你没有向服务传递参数时,推荐使用全局函数 ``service()``,因为性能有所提升。
71+
7072如果创建方法需要其他参数,可以在服务名称后传入:
7173
7274.. literalinclude :: services/004.php
0 commit comments