2

在 Silverstripe 3 中,一切都是按需自动加载的。这意味着人们可以知道他们想要使用的类和方法。例子:

Debug::dump('dump message');

如果我正确理解 SS4 的概念,则需要将类导入到您想使用该方法(或属性)的文件中。在上面的示例中,需要在文件顶部执行以下操作

use /name/space/to/Debug
Debug::dump('dump message');

这种理解正确吗?如果是这样,我真正的问题是开发人员如何有效地知道核心中所有内容的精确位置?除了它们的名称和您希望使用的方法之外,他们是否期望他们确切地知道这些核心文件在系统中的位置?有没有工具或方法可以帮助做到这一点?

4

1 回答 1

7

首先,澄清一下——你所说的不是自动加载,它更像是别名——但两者是相关的。

因为Debug该类不再位于全局命名空间中,所以它的名称更加冗长(SilverStripe\Dev\Debug)。这称为完全限定的类名,或简称为“FQCN”。然而,这个新名字并没有什么短的。键入很乏味,而且如果该类更改了名称,则需要进行大量更新。

为此,您可以使用该use语句将该类“导入”到别名下的文件的本地范围中。默认情况下,该别名只是 FQCN ( Debug) 的尾随部分,但您也可以使用您喜欢的任何自定义别名。( use SilverStripe\Dev\Debug as MyDebugger)。

SS4 现在使用PSR-4 自动加载,其中命名空间是一个关键部分。简而言之,它规定目录结构必须与 FQCN 匹配,例如/framework/src/Dev/Debug.php. 这使得自动加载具有确定性和可预测性。

至于工具,使用像PHPStorm这样的功能齐全的 IDE对于在具有命名空间类的框架中进行开发工作是非常宝贵的(如今,这比例外更普遍)。像 PHPStorm 这样的优秀 IDE 不仅会在您注入类名时自动完成,而且还会use为您添加语句,以及许多其他出色的节省时间的功能。

对于更手动的方法,api.silverstripe.org 是查找类映射的好地方。

于 2017-12-05T00:53:22.500 回答