ホームページ > バックエンド開発 > PHPチュートリアル > Egg Breaking Game の WEB バージョン - PHP バックエンド実装ソース コード

Egg Breaking Game の WEB バージョン - PHP バックエンド実装ソース コード

WBOY
リリース: 2016-08-08 09:31:43
オリジナル
2186 人が閲覧しました

以下はWEB版ゲームの背景ソースコードの一部であり、全ソースコードは順次公開予定です。含めるクラス ファイルが多数ある場合は、対応するルールを決定し、__autoload() 関数でクラス名と実際のディスク ファイルを照合するだけで、遅延読み込み効果を実現できます。ここから、 __autoload() 関数の実装で最も重要なことは、クラス名と実際のディスク ファイルの間のマッピング ルールの実装であることもわかります。​

しかし、ここで問題が発生します。システムの実装で他の多くのクラス ライブラリを使用する必要がある場合、これらのクラス ライブラリは異なる開発エンジニアによって開発され、クラス名と実際のディスク ファイルの間のマッピング ルールが異なる可能性があります。 。現時点で、クラス ライブラリ ファイルの自動ロードを実装したい場合は、すべてのマッピング ルールを __autoload() 関数に実装する必要があります。そのため、__autoload() 関数は非常に複雑になるか、実装が不可能になる可能性があります。最終的に、__autoload() 関数は実装できたとしても非常に肥大化する可能性があり、将来のメンテナンスとシステム効率に大きな悪影響を及ぼします。この場合、SPL 標準ライブラリが PHP5 で導入され、新しいソリューションは spl_autoload_register() 関数です。

2、spl_autoload_register()関数

この関数の機能は、SPLの__autoload関数スタックに関数を登録し、システムのデフォルトを削除することです_ _自動ロード() 関数。これは次の例で確認できます:

[cpp] view plaincopyprint?

  1. function __autoload($class_name) {
  2. echo '__autload class:', $class_name, '
    '
  3. }
  4. function classLoader($class_name) {
  5. echo
  6. 'SPL ロード クラス:', $class_name, '
    '
    ; }
  7. spl_autoload_register('classLoader'
  8. ); new
  9. Test();//結果: SPLロードクラス:Test りー

構文: bool spl_autoload_register ( [callback $autoload_function] ) は 2 つのパラメータを受け入れます。1 つはオートロード スタックに追加される関数で、もう 1 つはローダーがこのクラスを見つけられない場合に例外をスローするかどうかを示すフラグです。最初の引数はオプションで、デフォルトでは spl_autoload() 関数を指します。この関数は、小文字のクラス名と .php 拡張子または .ini 拡張子、または spl_autoload_extensions( ) という名前のファイル。 [php] plaincopyprint を表示? public

static function ローダー($classname)

)

$クラス名

).

".php "
  1. ; if (
  2. file_exists
  3. ($class_file)){
  4. $class_file
  5. ); $test = 新しい テスト();
    <?php  
    class CalssLoader   
    {   
        public static function loader($classname)   
        {   
            $class_file = strtolower($classname).".php";   
            if (file_exists($class_file)){   
                require_once($class_file);   
            }   
        }   
    }    
    // 方法为静态方法   
    spl_autoload_register('CalssLoader::loader');    
    $test = new Test();
    ログイン後にコピー
          一旦调用spl_autoload_register()函数,当调用未定义类时,系统会按顺序调用注册到spl_autoload_register()函数的所有函数,而不是自动调用__autoload()函数。如果要避免这种情况,需采用一种更加安全的spl_autoload_register()函数的初始化调用方法:

    [php] view plaincopyprint?

    1. if(false === spl_autoload_functions()){      
    2.     if(function_exists('__autoload')){      
    3.         spl_autoload_registe('__autoload',false);      
    4.     }      
    5.  }     
    if(false === spl_autoload_functions()){    
        if(function_exists('__autoload')){    
            spl_autoload_registe('__autoload',false);    
        }    
     }   
    ログイン後にコピー

    spl_autoload_functions()函数会返回已注册函数的一个数组,如果SPL自动加载栈还没有被初始化,它会返回布尔值false。然后,检查是否有一个名为__autoload()的函数存在,如果存在,可以将它注册为自动加载栈中的第一个函数,从而保留它的功能。之后,可以继续注册自动加载函数。

    还可以调用spl_autoload_register()函数以注册一个回调函数,而不是为函数提供一个字符串名称。如提供一个如array('class','method')这样的数组,使得可以使用某个对象的方法。

    下一步,通过调用spl_autoload_call('className')函数,可以手动调用加载器,而不用尝试去使用那个类。这个函数可以和函数class_exists('className',false)组合在一起使用以尝试去加载一个类,并且在所有的自动加载器都不能找到那个类的情况下失败。

    [php] view plaincopyprint?

    1. f(spl_autoload_call('className') && class_exists('className',false)){      
    2.     
    3.     } else {      
    4.     }     
    f(spl_autoload_call('className') && class_exists('className',false)){    
      
        } else {    
        }   
    ログイン後にコピー
    SPL自动加载功能是由spl_autoload() ,spl_autoload_register(), spl_autoload_functions() ,spl_autoload_extensions()和spl_autoload_call()函数提供的。

    

    以上就介绍了掼蛋游戏WEB版——PHP后台实现源码,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

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