web-dev-qa-db-ja.com

PHPコードで__autoload()を呼び出す方法

私はphpを初めて使用し、コードでphp5の__autoload機能を使用したいと考えています。 index.phpに以下のコードを記述しましたが、__ autoload関数をいつどのように呼び出す必要があるのか​​わかりません。

function __autoload($class) {
    if (file_exists($class . '.php')) {
        include($class . '.php');
    } else {
        throw new Exception('Unable to load class named $class');
    }
}

このスレッド も見ましたが、アプリケーションにそのようなオートローダークラスがありません。自動読み込みを使用するには、すべてのアプリケーションに個別のクラスが必要ですか?そうでない場合は、上記のような単一の機能を使用して、そのタスクを完了することができますか?誰かが私のphpコード内で上記の__autoload関数を呼び出す方法を説明できますか?

12
pabz

__autoload()を自分で呼び出すのではなく、PHPは、クラスの実装を見つけようとしているときに呼び出します。

例えば...

_function __autoload($className) {
     include $className . '.php';
}

$customClass = new CustomClass;
_

...これは__autoload()を呼び出し、引数としてCustomClassを渡します。この(たとえば愚かな)__autoload()実装は、最後にphp拡張子を付けてファイルをインクルードしようとします。

余談ですが、代わりにspl_autoload_register()を使用する必要があります。その後、複数の実装を作成できます。これは、自動ローダーで複数のライブラリを使用する場合に役立ちます。

... __autoload()の使用は推奨されておらず、非推奨になるか、将来削除される可能性があります。

ソース

13
alex

PHP __autoload()は魔法のメソッドです。つまり、クラスのオブジェクトを作成しようとしたときに、PHPエンジンが見つからない場合は、自動的に呼び出されます。スクリプト内のクラスは、__ autoload()マジックメソッドを呼び出そうとします。

以下の例のように実装できます。

function __autoload($ClassName)
{
    include($ClassName.".php");
}

$CustomClassObj = new CustomClass();
$CustomClassObj1 = new CustomClass1();
$CustomClassObj2 = new CustomClass2();

新しいオブジェクトを作成すると、すべてのクラスファイルが自動的に含まれます。

P.S.これを機能させるには、クラスファイル名をクラス名と同じにする必要があります。

7
Mohit Mehta

includeの代わりにrequire_onceを使用する必要があります。これにより、メモリが消費されます。最善の方法は次のとおりです。

function __autoload($class) {
   $class_name = strtolower($class);
   $path       = "{$class}.php";
   if (file_exists($path)) {
       require_once($path);
   } else {
       die("The file {$class}.php could not be found!");
   }
}
2
Hassan Azimi

また、phpファイルのロードにspl_autoload_register()を使用することもできます。これは、たとえば__autoloadよりもはるかに優れています。

<?php 
spl_autoload_register('myautoloadClass::myautoloadMethod');

class myautoloadClass{

   public static function myautoloadMethod(){
   require_once 'yourPath/'.'yourphpFile'.'.php';
   }

}

$obj = new xp; 


?>
1
PHMJ

__autoload()を使用せず、代わりにspl_autoload_registerを使用してください。 phpマニュアルを参照 これは

spl_autoload_register()は、クラスを自動ロードするためのより柔軟な代替手段を提供します。このため、__ autoload()の使用は推奨されておらず、将来的に非推奨または削除される可能性があります。

    <?php

    // function __autoload($class) {
    //     include 'classes/' . $class . '.class.php';
    // }

    function my_autoloader($class) {
        include 'classes/' . $class . '.class.php';
    }

    spl_autoload_register('my_autoloader');

    // Or, using an anonymous function as of PHP 5.3.0
    spl_autoload_register(function ($class) {
        include 'classes/' . $class . '.class.php';
    });

    ?>
0
RN Kushwaha