프로그래밍 언어/PHP

PHP: 파일 분할 (include, require)

include

include 언어구조는 여러 개의 PHP 문서가 있을 때, 소스코드를 포함시킬 때 사용합니다. 대부분은 상대경로를 사용합니다. php.ini 설정을 바꾸면 URL 형태로도 포함시킬 수 있으나, 보안의 측면에서 좋은 접근이라고 볼 수는 없습니다. 참고로 이러한 포함형태는 문맥과 스코프를 동일하게 가져갈 수 있습니다. 함수 내부에서 포함시키면 스코프는 함수입니다.

include 'HelloWorld.php';

include_once

_once 가 붙으면 해당 파일을 한 번만 포함시킵니다. 즉, 평범하게 include 를 사용하면 여러번 포함시킬 수 있다는 이야기입니다. 따라서 중복으로 포함되는 경우를 막을 때 사용하면 되겠습니다.

include_once 'HelloWorld.php';

require

require 언어구조 또한 include 처럼 파일을 포함시킬 때 사용합니다. 차이점이라면 include 는 파일을 포함시키지 못할 경우 경고만 던지는 반면 require 는 반드시 있어야하므로 에러를 던지게됩니다. 이것이 큰 차이점이라고 볼 수 있습니다.

require 'HelloWorld.php';

require_once

include_once 와 마찬가지로 파일을 한 번만 포함시킵니다. 당연히 못 찾게되면 에러를 던지게 됩니다.

require_once 'HelloWorld.php';

외부로 값 반환하기

include, require 를 사용할 때 값을 자바스크립트의 module.exports, export 처럼 값을 반환할 수 있습니다. 아래의 코드는 HelloWorld.php 에서 값을 반환하는 예제입니다. 

return [
    'message' => 'Hello, world'
];

return 키워드를 함수가 아니라, 글로벌 스코프에서 사용하고, 이을 만나면 문서가 끝납니다. 또 다른 소스코드에서 포함시킬 때는 다음과 같이 할 수 있습니다.

[ 'message' => $message ] = include 'HelloWorld.php';

또한 파일을 포함시키면 해당 파일의 글로벌 스코프에 선언된 변수, 함수, 상수, 클래스 등에 접근할 수 있습니다. 클래스나 함수, 상수에 접근하는 것은 괜찮을 지도 모르지만, 특수한 경우가 아니라면 포함하는 파일의 글로벌 스코프 변수에 접근하는 것은 그다지 좋은 접근이 아니므로 반환을 통해서 파일과 소통하는 것이 좋겠습니다.

더 읽을거리

PHP: declare

https://www.inflearn.com/course/php7-reboot

https://www.inflearn.com/course/php7-oop

PHP 카테고리 목차 및 문서 정리

2020년, PHP 언어가 가지는 의미

https://www.php.net/manual/en/