PHP 関数 __autoload() および spl_autoload_register()
__autoload($classname){
}
このメソッドは、PHP が独自の関数またはメソッドを登録するときにクラス ファイルを見つけられない場合に呼び出されます。 __autoload() 関数が呼び出され、カスタム関数が呼び出されます
spl_autoload_register('func_name');
spl_autoload_register(array('class_name','method_name'));
詳細は次のとおりです:
spl_autoload_register
(PHP 5 >= 5.1.2)
spl_autoload_register ? __autoload() 関数を登録します
説明
bool spl_autoload_register ([ callback $autoload_function ] )
関数を SPL __autoload 関数スタックに登録します。このスタック内の関数がまだアクティブになっていない場合は、アクティブにします。
__autoload 関数がプログラムに実装されている場合は、__autoload スタックに明示的に登録する必要があります。
spl_autoload_register() 関数は Zend Engine の __autoload 関数を spl_autoload() または
spl_autoload_call() に置き換えるからです。
Parameters
autoload_function
登録するオートロード関数。パラメーターが指定されていない場合、autoload
spl_autoload() のデフォルト実装関数が自動的に登録されます。
戻り値
成功した場合は TRUE、失敗した場合は FALSE を返します。
注: SPL は Standard PHP Library の略称です。これは、PHP5 で導入された拡張ライブラリであり、その主な機能には、オートロード メカニズムとさまざまな Iterator インターフェイスまたはクラスの実装が含まれます。 SPL オートロード メカニズムは、関数ポインタ autoload_func をオートロード関数を持つ自己実装関数にポイントすることによって実装されます。 SPL には 2 つの異なる関数 spl_autoload と spl_autoload_call があり、これら 2 つの異なる関数アドレスを autoload_func に指定することで、異なる自動ロード メカニズムが実装されます。
test.class.php
class Test
{
function __construct()
{
echo 'PHP や Flex のマスターと友達になりたいと思っています。一緒に学び、一緒に働きましょう!!! QQ:1055983238';
}
}
?>
load.php
class LOAD
{
static functionloadClass($class_name)
{
$filename = $ class_name.".class.php";
if (is_file($filename)) return include_once $filename;
}
}
/**
* オブジェクトの自動ロードを設定します
* spl_autoload_register ? 指定された関数を __autoload() 実装として登録します
*/
spl_autoload_register(array('LOAD', 'loadClass')) ;
$a = new Test();//多くのフレームワークはこのメソッドを使用してクラスを自動的にロードします
?>
class autoload
{
public static function load( $class name )
{
$filename = "/home/user/class/".$classname."class.php";
if (file_exists($filename)) {
require_once $filename
}
}
}
; function __autoload( $class name )
{ // これはデフォルトの自動ロード メソッドです
if (file_exists($filename) ]
// 注 : 次のクラスは未定義のように見えますが、実際には、システムは指定されたパスに基づいて /home/user// /class/*.class.php の下にある foo.class.php ファイルを自動的に検索します。 sql_autoload_register が見つからない場合は、エラーが報告されます。
$foo = 新しい foo();
$foo ->bar();