SPL_AUTOLOAD_UNREGISTER()関数は、SPL(標準PHPライブラリ)Autoloadスタックから以前に登録されたAutoloaderを削除するために使用されます。基本的な使用法は次のとおりです。
<span><span><span class="hljs-title function_ invoke__">spl_autoload_unregister</span></span><span>(</span><span><span class="hljs-string">'my_autoloader'</span></span><span>);
</span></span>
上記のコードでは、 「my_autoloader」は、以前にspl_autoload_register()を介して登録したオートローダーです。この関数は、 My_autoloaderをロードスタックから削除して、後続のクラスロードに使用されなくなります。
実際、 spl_autoload_unregister()自体は、特別なPHP環境や構成に依存しません。 PHPバージョンが5.1.2を超える限り、理論的には機能します(この機能はPHP 5.1.2から提供されます)。ただし、 spl_autoload_unregister()で適切に作業するための鍵は、spl_autoload_register()を使用してオートローダーを登録し、そのローダーが実際にSPL autoloadスタックに追加されるかどうかです。
したがって、現在のPHP環境がspl_autoload_unregister()をサポートできるかどうかを判断するには、次の側面から検証する必要があります。
まず、現在のPHPバージョンを確認します。 SPL_AUTOLOAD_UNREGISTER()は、PHPバージョン5.1.2以上でのみサポートされている機能です。 PHPバージョンが5.1.2より低い場合、 SPL_AUTOLOAD_UNREGISTER()は利用できません。 Phpversion()関数を介して現在のPHPバージョンを取得できます。
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">version_compare</span></span><span>(PHP_VERSION, </span><span><span class="hljs-string">'5.1.2'</span></span><span>, </span><span><span class="hljs-string">'>='</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"PHP バージョンサポート spl_autoload_unregister()"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"PHP バージョンはサポートされていません spl_autoload_unregister()"</span></span><span>;
}
</span></span>
PHPバージョンがこの機能をサポートしている場合は、Autoloaderが登録されていることを確認してください。 SPL_AUTOLOAD_FUNCTIONS()を使用して、現在登録されているAutoLoaderを表示できます。返された配列が空でない場合、ローダーが登録され、 spl_autoload_unregister()を正常に使用できることを意味します。
<span><span><span class="hljs-variable">$autoloaders</span></span><span> = </span><span><span class="hljs-title function_ invoke__">spl_autoload_functions</span></span><span>();
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">count</span></span><span>(</span><span><span class="hljs-variable">$autoloaders</span></span><span>) > </span><span><span class="hljs-number">0</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"オートローダーは現在登録されています"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"自動ローダー登録はありません"</span></span><span>;
}
</span></span>
PHPは、デフォルトで自動負荷メカニズムを提供します。特に、 SPL_AUTOLOAD()は、デフォルトで基本ローダーを登録します。このデフォルトのローダーをアンインストールしようとすると、問題が発生する可能性があります。これを回避するために、最初にデフォルトの自動車をアンインストールしていないことを確認できます。
デフォルトのローダー登録はカスタムローダーに干渉しませんが、デフォルトのローダーをアンインストールすると、不明なエラーが発生する場合があります。したがって、アンインストールしようとする前に、他の登録されたオートローダーがあるかどうかを確認できます。
spl_autoload_unregister()を呼び出すときに、有効なコールバック関数が渡されることを確認してください。例えば:
<span><span><span class="hljs-comment">// オートローダーを登録します</span></span><span>
</span><span><span class="hljs-title function_ invoke__">spl_autoload_register</span></span><span>(function (</span><span><span class="hljs-variable">$class</span></span><span>) {
</span><span><span class="hljs-keyword">include</span></span><span> </span><span><span class="hljs-string">'path/to/classes/'</span></span><span> . </span><span><span class="hljs-variable">$class</span></span><span> . </span><span><span class="hljs-string">'.php'</span></span><span>;
});
</span><span><span class="hljs-comment">// オートローダーは、次の方法でアンインストールできます</span></span><span>
</span><span><span class="hljs-title function_ invoke__">spl_autoload_unregister</span></span><span>(function (</span><span><span class="hljs-variable">$class</span></span><span>) {
</span><span><span class="hljs-keyword">include</span></span><span> </span><span><span class="hljs-string">'path/to/classes/'</span></span><span> . </span><span><span class="hljs-variable">$class</span></span><span> . </span><span><span class="hljs-string">'.php'</span></span><span>;
});
</span></span>
ただし、匿名関数をAutoloaderとして使用する場合、匿名関数への参照が呼び出されたときに動的に生成されるため、spl_autoload_unregister()を介して直接アンロードする場合があることに注意してください。それをアンインストールできるようにするには、通常、匿名関数を最初に名前付き関数にカプセル化するか、呼び出し可能なオブジェクトメソッドを使用する必要があります。
現在の環境がspl_autoload_unregister()を使用してオートローダーのアンインストールをサポートするかどうかを判断するために、キーは次のとおりです。
PHPバージョンが5.1.2を超えていることを確認してください。
spl_autoload_register()を使用して、オートローダーを正しく登録します。
登録済みのAutoloaderが現在存在していることを確認すると、 SPL_AUTOLOAD_FUNCTIONS()を介して確認できます。
これらの条件が満たされている限り、 spl_autoload_unregister()は正常に機能し、PHP環境によって制限されません。