> 백엔드 개발 > PHP 튜토리얼 > 계란 깨기 게임의 웹 버전 - PHP 배경 구현 소스 코드

계란 깨기 게임의 웹 버전 - PHP 배경 구현 소스 코드

WBOY
풀어 주다: 2016-08-08 09:31:43
원래의
2185명이 탐색했습니다.

다음은 WEB 버전 게임의 배경 소스코드 일부이며, 모든 소스코드는 순차적으로 공개될 예정이다. 포함할 클래스 파일이 많은 경우 해당 규칙을 결정한 다음 __autoload() 함수에서 클래스 이름을 실제 디스크 파일과 일치시키기만 하면 지연 로딩 효과를 얻을 수 있습니다. 여기서도 __autoload() 함수 구현에서 가장 중요한 것은 클래스 이름과 실제 디스크 파일 간의 매핑 규칙 구현이라는 것을 알 수 있습니다.​

그러나 이제 문제가 발생합니다. 시스템 구현에서 다른 많은 클래스 라이브러리를 사용해야 하는 경우 이러한 클래스 라이브러리는 다른 개발 엔지니어에 의해 개발될 수 있으며 클래스 이름과 실제 디스크 파일 간의 매핑 규칙이 다릅니다. . 모두 마찬가지입니다. 이때, 클래스 라이브러리 파일의 자동 로딩을 구현하려면 __autoload() 함수에서 모든 매핑 규칙을 구현해야 합니다. 따라서 __autoload() 함수는 매우 복잡하거나 구현이 불가능할 수도 있습니다. 결국 __autoload() 함수는 매우 비대해질 수 있습니다. 구현이 가능하더라도 향후 유지 관리 및 시스템 효율성에 큰 부정적인 영향을 미칠 것입니다. 이 경우 는 PHP5에 SPL 표준 라이브러리인 새로운 솔루션인 spl_autoload_register() 함수를 도입했습니다.

2. spl_autoload_register() 함수

이 함수의 기능은 SPL의 __autoload 함수 스택에 함수를 등록하고 시스템 기본 __autoload() 함수를 제거하는 것입니다. 이는 다음 예에서 볼 수 있습니다.

[cpp] 일반 복사 인쇄 보기

  1. function __autoload($class_name) {
  2. echo '__autload 클래스 :', $class_name, '
    '
  3. }
  4. function classLoader($class_name) {
  5. echo 'SPL 로드 클래스:', $class_name, '
    '
  6. } ('classLoader'
  7. ); new
  8. Test() //결과: SPL 로드 클래스: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
로그인 후 복사
구문

: bool spl_autoload_register ( [callback $autoload_function] )은 두 개의 매개변수를 허용합니다. 하나는 자동 로딩 스택에 추가된 함수이고, 다른 하나는 로더가 이 클래스를 찾을 수 없을 때 예외를 던질지 여부를 나타내는 플래그입니다. 첫 번째 매개변수는 선택사항이며 기본적으로 spl_autoload() 함수를 가리킵니다. 이 함수는 경로에서 소문자 클래스 이름과 .php 확장자 또는 .ini 확장자가 있는 확장자 또는 spl_autoload_extensions(에 등록된 다른 확장자를 자동으로 찾습니다. ) 함수.

[php] 일반 카피프린트를 보시겠습니까?

  1. 수업 CalssLoader
  2. {
  3. 🎜>
  4. 함수
  5. 로더(
  6. $classname) { > $class_file = strtolower(
  7. $classname ).
  8. ".php" >file_exists($class_file)){ >($class_file );
  9. //메서드는 정적 메서드입니다.   spl_autoload_register('CalssLoader::loader'
  10. ) >
  11. new 테스트()
    <?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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿