本文概述
加载程序是在Phalcon \ Loader目录下找到的类。此类根据自动加载的规则由一些预定义规则组成。它还处理错误, 例如, 如果某个类不存在, 但在程序的任何部分调用了该类, 则将调用特殊处理程序进行处理。
在Loader中, 如果根据程序中的需要添加了一个类, 则由于仅包含特定文件, 因此性能得以提高。该技术称为延迟初始化。
Phalcon \ Loader有4种方法来实现自动加载类:
- 注册命名空间
- 注册目录
- 注册类
- 注册文件
注册命名空间
当使用命名空间或外部库组织我们的代码时, 将调用此方法。
句法:
registerNamespaces()方法。
它采用一个关联数组, 其中键是名称空间前缀, 而它们的值是其类位置的目录。现在, 当加载程序尝试查找类名称空间分隔符时, 将替换为其目录分隔符。
注意:请始终在路径末尾添加斜杠。
实作
<?php
use Phalcon\Loader;
// Creates the autoloader
$loader = new Loader();
// Register some namespaces
$loader->registerNamespaces(
[
'Example\Base' => 'vendor/example/base/', 'Example\Adapter' => 'vendor/example/adapter/', 'Example' => 'vendor/example/', ]
);
// Register autoloader
$loader->register();
// The required class will automatically include the
// file vendor/example/adapter/srcmini.php
$srcmini = new \Example\Adapter\ srcmini ();
?>
注册目录
在这种方法中, 类位于寄存器目录下。由于文件统计信息会增加以进行计算, 因此此过程的性能无效。
实作
<?php
use Phalcon\Loader;
// Creates the autoloader
$loader = new Loader();
// Register some directories
$loader->registerDirs(
[
'library/MyComponent/', 'library/OtherComponent/Other/', 'vendor/example/adapters/', 'vendor/example/', ]
);
// Register autoloader
$loader->register();
// The required class will automatically include the file from
// the first directory where it has been located
// i.e. library/OtherComponent/Other/srcmini.php
$srcmini = new \srcmini();
?>
注册类
当项目放置在文件夹约定中对于使用类和路径访问文件无效时, 将使用此方法。这是最快的自动加载方法, 但不建议这样做, 因为维护成本很高。
实例
<?php
use Phalcon\Loader;
// Creates the autoloader
$loader = new Loader();
// Register some classes
$loader->registerClasses(
[
'Some' => 'library/OtherComponent/Other/Some.php', 'Example\Base' => 'vendor/example/adapters/Example/BaseClass.php', ]
);
// Register autoloader
$loader->register();
// Requiring a class will automatically include the file it references
// in the associative array
// i.e. library/OtherComponent/Other/srcmini.php
$srcmini = new \srcmini();
?>
注册文件
此方法用于注册非类的文件。要注册文件, 我们需要使用。当文件仅具有功能时, 此方法非常有用。
实作
<?php
use Phalcon\Loader;
// Creates the autoloader
$loader = new Loader();
// Register some classes
$loader->registerFiles(
[
'functions.php', 'arrayFunctions.php', ]
);
// Register autoloader
$loader->register();
?>
评论前必须登录!
注册