Maison développement back-end tutoriel php 掼蛋游戏WEB版——PHP后台实现源码

掼蛋游戏WEB版——PHP后台实现源码

Aug 08, 2016 am 09:31 AM
autoload class nbsp spl

以下是掼蛋游戏WEB版的部分后台源码,全部源码陆续发布。当有大量的类文件要包含的时候,我们只要确定相应的规则,然后在__autoload()函数中,将类名与实际的磁盘文件对应起来,就可以实现lazy loading的效果。从这里我们也可以看出__autoload()函数的实现中最重要的是类名与实际的磁盘文件映射规则的实现。 

但现在问题来了,假如在一个系统的实现中,假如需要使用很多其它的类库,这些类库可能是由不同的开发工程师开发,其类名与实际的磁盘文件的映射规则不尽相同。这时假如要实现类库文件的自动加载,就必须在__autoload()函数中将所有的映射规则全部实现,因此__autoload()函数有可能会非常复杂,甚至无法实现。最后可能会导致__autoload()函数十分臃肿,这时即便能够实现,也会给将来的维护和系统效率带来很大的负面影响。在这种情况下,在PHP5引入SPL标准库,一种新的解决方案,即spl_autoload_register()函数。

2、spl_autoload_register()函数

此函数的功能就是把函数注册至SPL的__autoload函数栈中,并移除系统默认的__autoload()函数。下面的例子可以看出:

[cpp] view plaincopyprint?

  1. function __autoload($class_name) {  
  2.     echo '__autload class:', $class_name, '
    '
    ;  
  3. }  
  4. function classLoader($class_name) {  
  5.     echo 'SPL load class:', $class_name, '
    '
    ;  
  6. }  
  7. spl_autoload_register('classLoader');  
  8. new Test();//结果:SPL load class:Test  
function __autoload($class_name) {
    echo '__autload class:', $class_name, '<br>';
}
function classLoader($class_name) {
    echo 'SPL load class:', $class_name, '<br>';
}
spl_autoload_register('classLoader');
new Test();//结果:SPL load class:Test
Copier après la connexion

语法:bool  spl_autoload_register ( [callback $autoload_function] )    接受两个参数:一个是添加到自动加载栈的函数,另外一个是加载器不能找到这个类时是否抛出异常的标志。第一个参数是可选的,并且默认指向spl_autoload()函数,这个函数会自动在路径中查找具有小写类名和.php扩展或者.ini扩展名,或者任何注册到spl_autoload_extensions()函数中的其它扩展名的文件。

[php] view plaincopyprint?

  1. class CalssLoader     
  2. {     
  3.     public static function loader($classname)     
  4.     {     
  5.         $class_file = strtolower($classname).".php";     
  6.         if (file_exists($class_file)){     
  7.             require_once($class_file);     
  8.         }     
  9.     }     
  10. }      
  11. // 方法为静态方法     
  12. spl_autoload_register('CalssLoader::loader');      
  13. $test = new 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(&#39;CalssLoader::loader&#39;);    
$test = new Test();
Copier après la connexion
      一旦调用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);    
    }    
 }   
Copier après la connexion

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') &amp;&amp; class_exists('className',false)){    
  
    } else {    
    }   
Copier après la connexion
SPL自动加载功能是由spl_autoload() ,spl_autoload_register(), spl_autoload_functions() ,spl_autoload_extensions()和spl_autoload_call()函数提供的。



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

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Solution : Votre organisation vous demande de modifier votre code PIN Solution : Votre organisation vous demande de modifier votre code PIN Oct 04, 2023 pm 05:45 PM

Solution : Votre organisation vous demande de modifier votre code PIN

Comment ajuster les paramètres de bordure de fenêtre sous Windows 11 : modifier la couleur et la taille Comment ajuster les paramètres de bordure de fenêtre sous Windows 11 : modifier la couleur et la taille Sep 22, 2023 am 11:37 AM

Comment ajuster les paramètres de bordure de fenêtre sous Windows 11 : modifier la couleur et la taille

Comment changer la couleur de la barre de titre sous Windows 11 ? Comment changer la couleur de la barre de titre sous Windows 11 ? Sep 14, 2023 pm 03:33 PM

Comment changer la couleur de la barre de titre sous Windows 11 ?

Comment activer ou désactiver les aperçus miniatures de la barre des tâches sur Windows 11 Comment activer ou désactiver les aperçus miniatures de la barre des tâches sur Windows 11 Sep 15, 2023 pm 03:57 PM

Comment activer ou désactiver les aperçus miniatures de la barre des tâches sur Windows 11

Problèmes d'erreur OOBELANGUAGE dans la réparation de Windows 11/10 Problèmes d'erreur OOBELANGUAGE dans la réparation de Windows 11/10 Jul 16, 2023 pm 03:29 PM

Problèmes d'erreur OOBELANGUAGE dans la réparation de Windows 11/10

Afficher le guide de mise à l'échelle sur Windows 11 Afficher le guide de mise à l'échelle sur Windows 11 Sep 19, 2023 pm 06:45 PM

Afficher le guide de mise à l'échelle sur Windows 11

10 façons de régler la luminosité sous Windows 11 10 façons de régler la luminosité sous Windows 11 Dec 18, 2023 pm 02:21 PM

10 façons de régler la luminosité sous Windows 11

Comment désactiver l'authentification de navigation privée pour iPhone dans Safari ? Comment désactiver l'authentification de navigation privée pour iPhone dans Safari ? Nov 29, 2023 pm 11:21 PM

Comment désactiver l'authentification de navigation privée pour iPhone dans Safari ?

See all articles