php中的autoload是什么?

vuv7lop3  于 2023-04-19  发布在  PHP
关注(0)|答案(4)|浏览(97)

此问题已在此处有答案

What is Autoloading; How do you use spl_autoload, __autoload and spl_autoload_register?(4个答案)
5年前关闭。
什么是PHP中的自动加载?

sczxawaw

sczxawaw1#

这将有助于您使用autoload.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。

kzipqqlq

kzipqqlq2#

什么是自动加载

每次你想在你的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");
9rygscc1

9rygscc13#

以下是官方文档:https://www.php.net/manual/en/language.oop5.autoload.php
简而言之,它只允许您定义类的搜索路径,这样就不需要手动包含包含它们的文件。
我建议你应该养成搜索www.example.com的习惯php.net,只要在地址后面加上函数名或明显的关键字就可以了。我就是这样找到php.net/autoload的。这样很方便。

tgabmvqs

tgabmvqs4#

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';
}

相关问题