PHPクラスの自動ロード機構

高洛峰
リリース: 2016-10-10 10:08:27
オリジナル
1420 人が閲覧しました

php の自動読み込み:

php5 より前では、特定のクラスまたはクラスメソッドを使用したい場合、クラスを使用するたびに include または require する必要があります。面倒な

php作者 簡単に言うと、現在インクルードがない場合は、システムが自動的にクラスを見つけて自動的に導入することができます~

そこで、__autoload()関数が登場しました。

通常、class_core.php に配置される discuz などのアプリケーション エントリ クラスに配置されます。

最初に簡単な例について話しましょう:

最初のケース: ファイル A.php の内容は次のとおりです

<?php
class A{
  public function __construct(){
         echo &#39;fff&#39;;
  }
}
?>
文件C.php 中内容如下:
<?php   
function __autoload($class)   
{   
$file = $class . &#39;.php&#39;;   
if (is_file($file)) {   
require_once($file);   
}   
}   

$a = new A(); //这边会自动调用__autoload,引入A.php文件
?>
ログイン後にコピー

2 番目のケース: オートロードをカスタマイズし、ローダーにもっとクールな名前を付けたい場合があります。 C .php は次のように変更されます:

<?php
function loader($class)
{
$file = $class . &#39;.php&#39;;
if (is_file($file)) {
require_once($file);
}
}
spl_autoload_register(&#39;loader&#39;); //注册一个自动加载方法,覆盖原有的__autoload
$a = new A();
?>
ログイン後にコピー

3 番目の状況: より高度になり、クラスを使用して自動読み込みを管理したいと考えています

<?php   
class Loader   
{   
public static function loadClass($class)   
{   
$file = $class . &#39;.php&#39;;   
if (is_file($file)) {   
require_once($file);   
}   
}   
}   

spl_autoload_register(array(&#39;Loader&#39;, &#39;loadClass&#39;));   

$a = new A();
?>
ログイン後にコピー

これが現時点で最良の形式です。

通常、spl_autoload_register(*)をエントリスクリプトに入れる、つまり最初から引用します。たとえば、次のようなディスカスアプローチがあります。

そうです

この段落をエントリーファイルの先頭に置くのは素晴らしいことです~

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート