【问题标题】:What is autoload in php? [duplicate]什么是php中的自动加载? [复制]
【发布时间】:2011-04-06 04:07:57
【问题描述】:

什么是 PHP 中的自动加载?

【问题讨论】:

  • 重新标记:删除 php5.3 标记,因为这是一个特定于 php5 的问题。

标签: php autoload


【解决方案1】:

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

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

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

在 PHP 7.2.0 中已弃用,为此建议使用 spl_autoload_register。

【讨论】:

  • 本文建议的_autoload函数不要再使用了,spl_autoload_register函数是首选。
  • 此链接可能会断开,请将链接中最重要的部分放在答案中。
【解决方案2】:

什么是自动加载?

每次你想在你的 PHP 项目中使用一个新类时,首先你需要包含这个类(使用 include 或 require 语言结构,没错,这不是函数)。但是,如果您定义了 __autoload 函数,则包含将自行处理。

include "classes/class.Foo.php";
 
$foo = new Foo;
$foo->start();
$foo->stop();

基本自动加载示例

function __autoload($class_name) 
{
    require_once $DOCUMENT_ROOT."classes/class.".$class_name.".php";
}
 
$foo = new Foo;
$foo->start();
$foo->stop();

PHP Official

Other

更新

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");

【讨论】:

【解决方案3】:

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

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

我建议您应该养成搜索 php.net 的习惯,只需在地址后附加函数名称或明显的关键字即可。这就是我找到 php.net/autoload 的方式。这样就很方便了。

【讨论】:

  • 一些 php 概念比 php 文档更好地由其他用户解释。通过提供对 SO 的解释的链接违背了它的目的。
【解决方案4】:
an __autoload() 

//function which is automatically called in case you are trying to use     
//a class/interface which hasn't been defined yet.

function __autoload($class_name) {
    include $class_name . '.php';
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-26
    • 2018-11-19
    • 2023-03-17
    • 2013-01-18
    • 2012-10-22
    • 2014-10-19
    • 2011-05-31
    • 2012-02-25
    相关资源
    最近更新 更多