PHP

php 에서 spl_autoload_register 의미

빡새 2022. 3. 17. 16:26

- autoload -

spl_autoload_register('loader2');
=> 이 함수가 의미하는 바가 무엇일까?
뒤에서 어떤 인스턴스를 만들려고 한다. 
그런데 만들려고 하는 인스턴스를 못 찾을 때가 있다. 
그럴 때는 'loader2'라는 함수를 실행하라는 뜻이다.


예를 들어 보자.

> spl_autoload_register('smallAutoloader');
> $obj = new Hello();



'Hello'라는 클래스를 찾아 와서 인스턴스로 만든다.
그렇게 만든 인스턴스는 obj라는 변수 안에 넣어 둔다.
근데 'Hello'라는 클래스를 찾을 수가 없다.
그러면 'smallAutoloader' 라는 이름의 함수를 찾아서 실행한다.
실행할 함수를 익명함수로 바로 넣어 줘도 된다.


- 어떤 식으로 작동하는가? -

위에서 'Hello'라는 클래스를 못 찾으면 
'smallAutoloader'라는 함수를 실행한다고 했다.
함수를 실행할 때, 파라미터를 하나 넘겨준다.
그 파라미터는 클래스의 이름이다.
어떤 클래스의 이름인지는 짐작이 간다.
내가 방금 만들려고 했는데 어디 있는지 못 찾았던 클래스의 이름이다.

예를 들어 보자.

> spl_autoload_register('smallAutoloader');
> $obj = new Hello();


만약 위에서 'Hello' 클래스를 못 찾았다면,
결국 smallAutoloader('Hello'); 이렇게 실행하는 것과 같음.


- 어떻게 쓰면 좋은가? -

파라미터로 클래스의 이름까지 받았겠다,
그럼 이제 할 일은 smallAutoloader(); 라는 함수에서,
우리가 인스턴스로 만들려던 클래스를 찾아 주면 된다.
자바로 치면 try-catch 문을 만들고, 
catch문 안에서 오류가 났던 클래스를 import 하는 것과 비슷하다.

예를 들어 보자.

function smallAutoloader($path) {   //$path에는 인스턴스로 만들고 싶은 클래스의 이름이 들어 있다. ex)Hello
    $path .= '.php';    //뒤에 '.php'를 붙여서 파일명으로 만든다. ex) Hello.php
    require_once($path);    //파일을 불러온다.
}

 


참고 자료 : https://www.youtube.com/watch?v=OPH_3gmv5ro&list=PLuHgQVnccGMDzq8zAwEY5lvwDWXWTZjB6&index=21

반응형