在Silverstripe 3中,eveything根据需要自动加载。这意味着人们可以知道他们想要使用的类和方法。例如:
Debug::dump('dump message');
如果我正确理解SS4的概念,则需要将类导入到您要使用方法(或属性)的文件中。在上面的示例中,需要在文件顶部执行以下操作
use /name/space/to/Debug
Debug::dump('dump message');
这种理解是否正确?如果是这样,我真正的问题是开发人员如何有效地知道核心中所有内容的准确位置?他们是否希望知道这些核心文件在系统中的确切位置,以及您希望使用的名称和方法?有没有工具或方法可以帮助解决这个问题?
答案 0 :(得分:7)
首先,只是一个澄清 - 你所谈论的不是自动加载,它更像是别名 - 但这两者是相关的。
由于Debug
类不再位于全局命名空间中,因此其名称更加详细(SilverStripe\Dev\Debug
)。这称为完全限定的类名,或简称为“FQCN”。然而,关于这个新名称并不缺乏。打字很繁琐,如果班级改名,你就会有很多更新。
为此,您可以使用use
语句将该类“导入”到别名下的文件的本地范围。默认情况下,该别名只是FQCN(Debug
)的尾随部分,但您也可以使用您喜欢的任何自定义别名。 (use SilverStripe\Dev\Debug as MyDebugger
)。
SS4现在使用PSR-4 autoloading,其中命名空间是一个关键部分。在很短的时间内,它规定目录结构必须与FQCN匹配,例如, /framework/src/Dev/Debug.php
。这使得自动加载具有确定性和可预测性。
对于工具,使用像PHPStorm这样的全功能IDE对于在具有命名空间类的框架中进行开发工作是非常宝贵的(这些规则远远超过了例外情况)。一个好的IDE,比如PHPStorm,不仅会在你注入一个类名时自动完成,而且还会为你添加use
语句,以及许多其他很棒的节省时间的功能。
对于更加手动的方法,api.silverstripe.org是查找类映射的好地方。