Das Folgende ist ein Teil des Hintergrundquellcodes für die WEB-Version des Spiels, und alle Quellcodes werden nacheinander veröffentlicht. Wenn eine große Anzahl von Klassendateien einbezogen werden muss, müssen wir nur die entsprechenden Regeln festlegen und dann die Klassennamen mit den tatsächlichen Festplattendateien in der Funktion __autoload() abgleichen, um den Lazy-Loading-Effekt zu erzielen. Hier können wir auch erkennen, dass das Wichtigste bei der Implementierung der Funktion __autoload() die Implementierung der Zuordnungsregeln zwischen dem Klassennamen und der tatsächlichen Festplattendatei ist.
Aber jetzt kommt das Problem. Wenn Sie bei der Implementierung eines Systems viele andere Klassenbibliotheken verwenden müssen, können diese Klassenbibliotheken von verschiedenen Entwicklungsingenieuren entwickelt werden und die Zuordnungsregeln zwischen ihren Klassennamen und den tatsächlichen Festplattendateien sind unterschiedlich . Trotzdem. Wenn Sie zu diesem Zeitpunkt das automatische Laden von Klassenbibliotheksdateien implementieren möchten, müssen Sie alle Zuordnungsregeln in der Funktion __autoload() implementieren. Daher kann die Implementierung der Funktion __autoload() sehr kompliziert oder sogar unmöglich sein. Letztendlich kann die Funktion __autoload() sehr aufgebläht werden. Selbst wenn sie implementiert werden kann, wird sie große negative Auswirkungen auf die zukünftige Wartung und Systemeffizienz haben. In diesem Fall wurde die SPL-Standardbibliothek in PHP5 eingeführt, eine neue Lösung, die Funktion spl_autoload_register().
2. spl_autoload_register() Funktion
Die Funktion dieser Funktion besteht darin, die Funktion im __autoload-Funktionsstapel von SPL zu registrieren und die Systemstandardfunktion __autoload() zu entfernen. Dies ist im folgenden Beispiel zu sehen:
[cpp] view plaincopyprint?
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
: bool spl_autoload_register ( [callback $autoload_function] ) akzeptiert zwei Parameter: Einer ist die Funktion, die dem Autoloading-Stack hinzugefügt wird, und der andere ist ein Flag, das angibt, ob eine Ausnahme ausgelöst werden soll, wenn der Loader diese Klasse nicht finden kann. Der erste Parameter ist optional und verweist standardmäßig auf die Funktion spl_autoload(), die automatisch nach jeder Erweiterung im Pfad sucht, die einen Klassennamen in Kleinbuchstaben und eine .php-Erweiterung oder .ini-Erweiterung hat, oder jede andere Erweiterung, die bei spl_autoload_extensions( registriert ist. ) Funktion.
[php] Klartext anzeigen?
<?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();
[php] view plaincopyprint?
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?
f(spl_autoload_call('className') && class_exists('className',false)){ } else { }
以上就介绍了掼蛋游戏WEB版——PHP后台实现源码,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。