【发布时间】:2011-04-06 04:07:57
【问题描述】:
什么是 PHP 中的自动加载?
【问题讨论】:
-
重新标记:删除 php5.3 标记,因为这是一个特定于 php5 的问题。
什么是 PHP 中的自动加载?
【问题讨论】:
这将对您使用自动加载有所帮助。 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。
【讨论】:
什么是自动加载?
每次你想在你的 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 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");
【讨论】:
__autoload()。这是better to use spl_autoload_register
这里是官方文档:http://php.net/autoload
简而言之,它只允许您定义类的搜索路径,因此您不需要手动包含包含它们的文件。
我建议您应该养成搜索 php.net 的习惯,只需在地址后附加函数名称或明显的关键字即可。这就是我找到 php.net/autoload 的方式。这样就很方便了。
【讨论】:
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';
}
【讨论】: