ホームページ  >  記事  >  バックエンド開発  >  PHP関数__autoloadが失敗する理由(smarty関連)

PHP関数__autoloadが失敗する理由(smarty関連)

WBOY
WBOYオリジナル
2016-07-29 09:16:121054ブラウズ

PHPの関数__autoloadで簡単な自動ロードが実現できますが、spl_autoload_register関数が原因であることがsmarty導入後に判明しました。

次のコードを実行します:

function __autoload($name)
{
	require 'class/'.$name.'.php';
	echo '1';
}
function autoload_test($name)
{
	echo '2';
}
spl_autoload_register('autoload_test');
$ca=new Ca();

結果は出力 2 です。__autoload 関数が実行されていないことがわかります。公式 Web サイトの分析は次のとおりです。 __autoload() 関数がプログラムに実装されている場合、それは次のようになります。 __autoload() キューに明示的に登録されます。 spl_autoload_register() 関数は、Zend Engine の __autoload() 関数を spl_autoload() または spl_autoload_call() に置き換えるためです。

コードが正しく動作するためには、__autoload 関数を再登録する必要があります:

function __autoload($name)
{
	require 'class/'.$name.'.php';
	echo '1';
}
function autoload_test($name)
{
	echo '2';
}
spl_autoload_register('autoload_test');
spl_autoload_register('__autoload');
$ca=new Ca();

著作権表示: この記事はブロガーによるオリジナルの記事であり、ブロガーの許可なく複製することはできません。

上記は、PHP 関数 __autoload (smarty に関連) が失敗する理由を、関連する内容も含めて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。