ClassLoader是用于自动加载类的PHP库。类自动加载意味着仅在实际需要时加载类,而不必在每个执行中包括每个类文件。这减少了页面上的加载开销,尤其是在较大的网站上,因为只需要加载一些类文件。通常,这些类也会根据文件名和基于名称名称的文件名进行动态加载。这也使管理大量的类文件更容易。
该库支持当前自动加载类的两个标准,即PSR-0和PSR-4。这些标准背后的基本思想是,类文件基于其名称空间和以类命名的文件位于目录中。这两个标准之间的关键区别在于,PSR-4不需要目录层次结构中存在整个命名空间。
但是,由于查找实际类文件的操作往往相对昂贵,因此该库还提供了基本的缓存机制,允许在PHP文件中缓存类文件位置。通过缓存,手动加载和加载文件之间的性能差异可以忽略不计。
可以使用Apigen生成的API文档可以在线阅读:http://kit.riimu.net/api/classloader/
安装此库的最简单方法是使用作曲家来处理您的依赖项。为了通过作曲家安装此库,只需按照以下两个步骤操作:
通过在项目root中运行作曲家命令行安装来获取composer.phar 。
运行安装脚本后,您应该在项目root中有composer.phar文件,并且可以运行以下命令:
php composer.phar require "riimu/kit-classloader:^4.4"
通过作曲家安装此库后,您可以通过包括由作曲家在安装过程中生成的vendor/autoload.php文件加载库。
如果您已经熟悉如何使用Composer,则可以通过将以下composer.json文件添加到项目中并运行composer install命令来添加库作为依赖项:
{
"require" : {
"riimu/kit-classloader" : " ^4.4 "
}
}如果您不希望使用作曲家加载库,则可以通过下载最新版本并将src文件夹提取到您的项目中来手动下载库。然后,您可以包括提供的src/autoload.php文件以加载库类。
ClassLoader分别支持由PSR-0和PSR-4标准通过方法addBasePath()和addPrefixPath()定义的自动加载。您无需了解这些标准即可使用此库,只需使用最适合您的方法即可。
PSR-0类自动加载定义的类文件必须放置在反映其名称空间的目录树中。例如,“ foo bar baz”类可以位于文件中'/path/path/to/classes/foo/bar/bar/baz.php'。此方法通常是放置类文件的最简单方法。
使用addBasePath()方法,您可以定义在哪里寻找类的基本目录。要加载上面提到的类,您可以使用以下代码:
<?php
require ' vendor/autoload.php ' ;
$ loader = new Riimu Kit ClassLoader ClassLoader ();
$ loader -> addBasePath ( ' /path/to/classes/ ' );
$ loader -> register ();
$ obj = new Foo Bar Baz ();如果特定目录仅适用于特定名称空间,则可以使用第二个参数来定义名称空间。但是,目录仍需要指向命名空间的基本目录。例如:
<?php
require ' vendor/autoload.php ' ;
$ loader = new Riimu Kit ClassLoader ClassLoader ();
$ loader -> addBasePath ( ' /path/to/classes/ ' , ' FooBar ' );
$ loader -> register ();
$ obj = new Foo Bar Baz ();请注意,PSR-0还指出,班级名称中的强调被视为名称空间分离器(但在名称空间中不强调)。因此,即使您的班级被称为“ foo bar_baz”,以上两个示例仍然可以使用。即使使用类名中的下划线定义了类名称空间,您也需要在命名空间参数中使用反斜杠。
与PSR-0不同,PSR-4类自动加载标准不需要将类放置在反映其整个命名空间的目录树中。取而代之的是,可以用特定路径代替一部分名称空间。
例如,如果您的类“ foo bar baz”位于文件'/path/path/path/to/library/baz.php'中,则可以使用addPrefixPath()注册路径并指定名称空间,如以下示例所示:
<?php
require ' vendor/autoload.php ' ;
$ loader = new Riimu Kit ClassLoader ClassLoader ();
$ loader -> addPrefixPath ( ' /path/to/Library/ ' , ' FooBar ' );
$ loader -> register ();
$ obj = new Foo Bar Baz ();这允许大量较短的目录结构,因为整个命名空间无需在目录树中反映。还可以省略命名空间参数,在这种情况下,路径的工作原理与通过addBasePath()添加的路径相同,只是这样的事实,即不能将其视为名称空间分隔符的事实。
虽然您只需多次调用路径添加方法,但可以使用数组添加多个路径。这通常会使配置变得容易得多。例如,您可以通过提供一个数组来添加多个基本路径:
<?php
require ' vendor/autoload.php ' ;
$ loader = new Riimu Kit ClassLoader ClassLoader ();
$ loader -> addPrefixPath ([
' /path/to/classes/ ' ,
' /other/path/ ' ,
]);
$ loader -> register ();或者,您可以通过提供使用数组键来定义名称空间的关联数组来添加命名空间特定路径:
<?php
require ' vendor/autoload.php ' ;
$ loader = new Riimu Kit ClassLoader ClassLoader ();
$ loader -> addPrefixPath ([
' FooBar ' => ' /path/to/classes/ ' ,
' OtherNamesapace ' => [ ' /other/path/ ' , ' /some/other ' ],
]);
$ loader -> register ();如上示例所示,您还可以提供特定名称空间的路径列表。
在每个请求中寻找文件系统中的类是一件昂贵的事情。强烈建议缓存文件位置,以便无需在每个请求上搜索它们。毕竟,类文件不会在文件系统中移动。
该库通过FileCacheClassLoader提供了一个非常简单的缓存系统。该类将文件位置存储在单个PHP文件中,该文件在每个请求上加载,而不是手动搜索文件。
FileCacheClassLoader的使用与使用ClassLoader并没有太大差异。您只需要在构造函数中提供可写的高速缓存文件的路径即可。该文件将用于存储类位置,并在发现新的类文件时会重写。例如:
<?php
require ' vendor/autoload.php ' ;
$ loader = new Riimu Kit ClassLoader FileCacheClassLoader ( __DIR__ . ' /cache.php ' );
$ loader -> addBasePath ( ' /path/to/classes/ ' );
$ loader -> register ();该图书馆是版权(C)2012-2017 RiikkaKalliomäki。
有关许可证和复制信息,请参见许可证。