我不是真的得到的文档spl_autoload

bool spl_autoload_register  ([ callback $autoload_function  ] )

从我的理解是,它将试图运行职能时注册的php遇到的一类不装载。因此例,

public function autoload() {
    require ('nonLoadedClass.php');
}
spl_autoload_register(autoload);
$x = new nonLoadedClass();

将导致需要运行?所以我也可以登记许多自动加载的功能吗?

public function autoloadXXX() {...}
public function autoloadYYY() {...}
public function autoloadZZZ() {...}
spl_autoload_register('autoloadXXX');
spl_autoload_register('autoloadYYY');
spl_autoload_register('autoloadZZZ');

在这种情况的原则,

require_once(dirname(__FILE__) . '/lib/vendor/doctrine/Doctrine.php');
spl_autoload_register(array('Doctrine', 'autoload'));

一系列传递,所以我猜它会尝试运行自动加载内的功能理论类(其是必须的)?

有帮助吗?

解决方案

spl_autoloader_register 寄存器回呼功能/方法,这将被称为当代码是试图使用一个不知名的类。

一个 回调 功能可以描述的在几个方面:

  • 一个简单的功能名称: 'my_function'
  • 一个静态的方法的等级: array('MyClass', 'myMethod')
  • 一方法的一个实例一类: array($myObject, 'myMethod')

在这种情况的原则,这似乎是第二个解决方案:如果一个类PHP不知道使用自动装载机会呼叫 Doctrine::autoload, 传递这类名作为参数。


所以我也可以登记许多自动加载 职能?

是的,你可以, spl_autoload_register :

如果存在必须自动加载多 功能, spl_autoload_register() 允许这一点。它有效 创建一个队的自动装载功能, 和运行通过他们每个人的 为了他们的定义。

但我们一般不定义一个自动加载功能/方法对每一类中,我们有;这将是相当低效率,我想。

相反,我们使用这类名称,其收到的自动加载功能,以决定哪些文件应包括在内。

例如,自动加载功能可能是这样的:

function my_autoloader($className)
{
    require LIBRARY_PATH . '/' . $className . '.php';
}

的伎俩是如果你的文件被命名的课程,它们包含,它立刻变得容易得多;-)

这就是为什么班是经常被使用的梨公约: My_Class_Name 地图的文件 My/Class/Name.php

其他提示

您整个语句是正确的。

spl_autoload_register允许用户注册多个自动加载功能。在您尝试创建或使用尚未加载到PHP环境中的类的对象的情况下,PHP将运行所有自动加载功能,寻找那类。

你给正在使用所谓的回调学说示例注册的内部的方法类。回调是简单地包含类名(静态方法),阵列或该类的一个实例(非静态方法),并且该方法的名称。

有什么说什么是正确的。它被称为当一个未知的类实例化。然后你得到的机会,包括/需要的必要的文件。

当功能驻留在一个班,你必须通过在一个阵列。在这种情况下,它是一个静态功能,因为他们通过在理论课,而不是一个实例的原则类。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top