什么是自动加载在PHP?

DEV*_*OPS 42 php autoload

什么是PHP中的自动加载?

osm*_*osm 32

这将有助于您使用自动加载.http://ditio.net/2008/11/13/php-autoload-best-practices/

这是一个神奇的功能,可以帮助您使用类名包含/要求文件.

function __autoload($class_name) 
{
    require_once $DOCUMENT_ROOT . “/classes/” . $class_name .“.php”;
}
Run Code Online (Sandbox Code Playgroud)

它在PHP 7.2.0中已弃用,建议使用spl_autoload_register.

  • 此链接可能会中断,请将链接中最重要的部分放在答案中. (7认同)
  • 不应再使用本文中建议的[_autoload](http://php.net/manual/en/function.autoload.php)函数,[spl_autoload_register](http://php.net/manual/ en/function.spl-autoload-register.php)函数是首选. (3认同)

sli*_*kts 29

这是官方文档:http://php.net/autoload

简而言之,它只允许您定义类的搜索路径,因此您不需要手动包含包含它们的文件.

我建议你养成一个习惯,只需在地址中添加函数名或明显的关键字即可搜索php.net.这就是我发现php.net/autoload的方式.这样很方便.

  • 除了php文档之外,其他用户可以更好地解释一些php概念.通过提供关于SO的解释的链接来破坏其目的. (8认同)

Muh*_*zad 29

什么是自动加载?

每次要在PHP项目中使用新类时,首先需要包含此类(使用include或require语言构造,这是正确的,这不是函数).但是,如果您定义了__autoload函数,则包含将自行处理.

include "classes/class.Foo.php";

$foo = new Foo;
$foo->start();
$foo->stop();
Run Code Online (Sandbox Code Playgroud)

基本自动加载示例

function __autoload($class_name) 
{
    require_once $DOCUMENT_ROOT.“classes/class.”.$class_name.“.php”;
}

$foo = new Foo;
$foo->start();
$foo->stop();
Run Code Online (Sandbox Code Playgroud)

PHP官方

其他

更新

PHP 5引入了魔术函数__autoload(),当您的代码引用尚未加载的类或接口时,它会自动调用.

__autoload()功能的主要缺点是您只能提供一个自动加载器.引入了PHP 5.1.2 spl_autoload(),它允许您注册多个自动加载器功能,并且将来该__autoload()功能将被弃用.

引入spl_autoload_register()给程序员创建自动加载链的能力,可以调用一系列函数来尝试加载类或接口.例如:

<?php
function autoloadModel($className) {
    $filename = "models/" . $className . ".php";
    if (is_readable($filename)) {
        require $filename;
    }
}

function autoloadController($className) {
    $filename = "controllers/" . $className . ".php";
    if (is_readable($filename)) {
        require $filename;
    }
}

spl_autoload_register("autoloadModel");
spl_autoload_register("autoloadController");
Run Code Online (Sandbox Code Playgroud)

  • 请不要使用`__autoload()`。[最好使用 spl_autoload_register](http://stackoverflow.com/questions/7651509/someone-explain-spl-autoload-autoload-and-spl-autoload-register) (2认同)