web-dev-qa-db-ja.com

PHPのオートロードとは何ですか?

pHPのオートロードとは何ですか?

39
DEVOPS

これは、オートロードの使用に関する助けになります。 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がその目的のために推奨されています。

30
osm

公式ドキュメントは次のとおりです。 http://php.net/autoload

要するに、クラスの検索パスを定義することができるので、それらを含むファイルを手動で含める必要はありません。

関数名または明白なキーワードをアドレスに追加するだけで、php.netを検索する習慣を身に付けることをお勧めします。それがphp.net/autoloadの発見方法です。そのように非常に便利です。

29
slikts

オートローディングとは何ですか?

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公式

その他

更新

PHP 5では、まだ読み込まれていないクラスまたはインターフェースをコードが参照するときに自動的に呼び出されるマジック関数__autoload()が導入されました。

__autoload()関数の主な欠点は、オートローダーを1つしか提供できないことです。 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");
_
27
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';
}
1
kumardippu