다음은 WEB 버전 게임의 배경 소스코드 일부이며, 모든 소스코드는 순차적으로 공개될 예정이다. 포함할 클래스 파일이 많은 경우 해당 규칙을 결정한 다음 __autoload() 함수에서 클래스 이름을 실제 디스크 파일과 일치시키기만 하면 지연 로딩 효과를 얻을 수 있습니다. 여기서도 __autoload() 함수 구현에서 가장 중요한 것은 클래스 이름과 실제 디스크 파일 간의 매핑 규칙 구현이라는 것을 알 수 있습니다.
그러나 이제 문제가 발생합니다. 시스템 구현에서 다른 많은 클래스 라이브러리를 사용해야 하는 경우 이러한 클래스 라이브러리는 다른 개발 엔지니어에 의해 개발될 수 있으며 클래스 이름과 실제 디스크 파일 간의 매핑 규칙이 다릅니다. . 모두 마찬가지입니다. 이때, 클래스 라이브러리 파일의 자동 로딩을 구현하려면 __autoload() 함수에서 모든 매핑 규칙을 구현해야 합니다. 따라서 __autoload() 함수는 매우 복잡하거나 구현이 불가능할 수도 있습니다. 결국 __autoload() 함수는 매우 비대해질 수 있습니다. 구현이 가능하더라도 향후 유지 관리 및 시스템 효율성에 큰 부정적인 영향을 미칠 것입니다. 이 경우 는 PHP5에 SPL 표준 라이브러리인 새로운 솔루션인 spl_autoload_register() 함수를 도입했습니다.
2. spl_autoload_register() 함수
이 함수의 기능은 SPL의 __autoload 함수 스택에 함수를 등록하고 시스템 기본 __autoload() 함수를 제거하는 것입니다. 이는 다음 예에서 볼 수 있습니다.
[cpp] 일반 복사 인쇄 보기
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] )은 두 개의 매개변수를 허용합니다. 하나는 자동 로딩 스택에 추가된 함수이고, 다른 하나는 로더가 이 클래스를 찾을 수 없을 때 예외를 던질지 여부를 나타내는 플래그입니다. 첫 번째 매개변수는 선택사항이며 기본적으로 spl_autoload() 함수를 가리킵니다. 이 함수는 경로에서 소문자 클래스 이름과 .php 확장자 또는 .ini 확장자가 있는 확장자 또는 spl_autoload_extensions(에 등록된 다른 확장자를 자동으로 찾습니다. ) 함수.
[php] 일반 카피프린트를 보시겠습니까?
<?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教程有兴趣的朋友有所帮助。