私は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関数を呼び出す方法を説明できますか?
__autoload()
を自分で呼び出すのではなく、PHPは、クラスの実装を見つけようとしているときに呼び出します。
例えば...
_function __autoload($className) {
include $className . '.php';
}
$customClass = new CustomClass;
_
...これは__autoload()
を呼び出し、引数としてCustomClass
を渡します。この(たとえば愚かな)__autoload()
実装は、最後にphp
拡張子を付けてファイルをインクルードしようとします。
余談ですが、代わりにspl_autoload_register()
を使用する必要があります。その後、複数の実装を作成できます。これは、自動ローダーで複数のライブラリを使用する場合に役立ちます。
...
__autoload()
の使用は推奨されておらず、非推奨になるか、将来削除される可能性があります。
ソース 。
PHP __autoload()は魔法のメソッドです。つまり、クラスのオブジェクトを作成しようとしたときに、PHPエンジンが見つからない場合は、自動的に呼び出されます。スクリプト内のクラスは、__ autoload()マジックメソッドを呼び出そうとします。
以下の例のように実装できます。
function __autoload($ClassName)
{
include($ClassName.".php");
}
$CustomClassObj = new CustomClass();
$CustomClassObj1 = new CustomClass1();
$CustomClassObj2 = new CustomClass2();
新しいオブジェクトを作成すると、すべてのクラスファイルが自動的に含まれます。
P.S.これを機能させるには、クラスファイル名をクラス名と同じにする必要があります。
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!");
}
}
また、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;
?>
__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';
});
?>