PHPカスタム関数を自動ロードするためのオートロード機構の例の詳細な説明

伊谢尔伦
リリース: 2023-03-12 08:50:02
オリジナル
1433 人が閲覧しました

この記事では、主に PHP の自動読み込みメカニズムの例を紹介します。ファイル構造は次のとおりです。必要な場合は、

1、カスタム関数

2、spl_autoload_register() を参照してください。

コードは次のとおりです:

liuyuan@ebuinfo:/var/www/phpgcs/php_autoload$ ll ./*
-rw-rw-r-- 1 liuyuan liuyuan  800 Feb 19 11:39 ./func_autoload.php
-rw-rw-r-- 1 liuyuan liuyuan  906 Feb 19 11:28 ./spl_autoload.php
./include:
total 16
drwxrwxr-x 2 liuyuan liuyuan 4096 Feb 19 11:42 ./
drwxrwxr-x 3 liuyuan liuyuan 4096 Feb 19 11:43 ../
-rw-rw-r-- 1 liuyuan liuyuan  142 Feb 19 11:42 aClass.php
-rw-rw-r-- 1 liuyuan liuyuan  143 Feb 19 11:42 bClass.php
ログイン後にコピー

最初にカスタム関数メソッドを確認します:

コードは次のとおりです:

<?php
    define(&#39;EOL&#39;, (PHP_SAPI == &#39;cli&#39;) ? PHP_EOL : &#39;</ br>&#39;);
    print_r(get_included_files());
    echo EOL;
    print get_include_path();
    echo EOL;
    //set_include_path(get_include_path().PATH_SEPARATOR.&#39;/var/www/ly_php/php_spl/include/&#39;);
    //set_include_path(dirname(FILE).&#39;/include&#39;);
    //set_include_path(dirname(FILE).&#39;/include/&#39;);

    function autoload($className){
        $filename = &#39;./include/&#39;.$className.&#39;.php&#39;;
        //$filename = &#39;./include/&#39;.$className.&#39;.php&#39;;
        //$filename = &#39;/var/www/ly_php/php_spl/include/&#39;.$className.&#39;.php&#39;;
        if(file_exists($filename)){
            include_once $filename;
        }else{
            exit(&#39;no file&#39;);
        }
    }

    $a = new aClass();
    $b = new bClass();
    print_r(get_included_files());
?>
ログイン後にコピー

実行結果は次のとおりです:

コードは次のとおりです:

liuyuan@ebuinfo:/var/www/phpgcs/php_autoload$ php func_autoload.php 
Array
(
    [0] => /var/www/phpgcs/php_autoload/func_autoload.php
)
.:/usr/share/php:/usr/share/pear
aClass is loaded
bClass is loaded
Array
(
    [0] => /var/www/phpgcs/php_autoload/func_autoload.php
    [1] => /var/www/phpgcs/php_autoload/include/aClass.php
    [2] => /var/www/phpgcs/php_autoload/include/bClass.php
)
ログイン後にコピー

2 番目の方法:

コードは次のとおりです:

<?php
    class myLoader{
        public static function autoload($className){
            $filename = &#39;./include/&#39;.$className.&#39;.php&#39;;
            if(file_exists($filename)){
                include_once $filename;
            }else{
                exit(&#39;no file&#39;);
            }
        }
    }
    define(&#39;EOL&#39;, (PHP_SAPI == &#39;cli&#39;) ? PHP_EOL : &#39;<br />&#39;);
    spl_autoload_register(array(&#39;myLoader&#39;, &#39;autoload&#39;));
    /**
    *autoload 方法在 spl_autoload_register 后会失效,因为 autoload_func 函数指针已指向 spl_autoload 方法
    * 可以通过下面的方法来把 _autoload 方法加入 autoload_functions list
    */
    //spl_autoload_register( &#39;autoload&#39; );
 
    
error_reporting
(E_ALL^E_NOTICE^E_WARNING^E_ERROR);
    error_reporting(E_NOTICE | E_WARNING );
    $a = new aClass();
    print_r(get_included_files());
    echo EOL;
    $b = new bClass();
    echo EOL;
?>
ログイン後にコピー

実行結果は次のとおりです:

コードは次のとおりです:

liuyuan@ebuinfo:/var/www/phpgcs/php_autoload$ php spl_autoload.php 
aClass is loaded
Array
(
    [0] => /var/www/phpgcs/php_autoload/spl_autoload.php
    [1] => /var/www/phpgcs/php_autoload/include/aClass.php
)
bClass is loaded
ログイン後にコピー


以上がPHPカスタム関数を自動ロードするためのオートロード機構の例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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