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';
또한 파일을 포함시키면 해당 파일의 글로벌 스코프에 선언된 변수, 함수, 상수, 클래스 등에 접근할 수 있습니다. 클래스나 함수, 상수에 접근하는 것은 괜찮을 지도 모르지만, 특수한 경우가 아니라면 포함하는 파일의 글로벌 스코프 변수에 접근하는 것은 그다지 좋은 접근이 아니므로 반환을 통해서 파일과 소통하는 것이 좋겠습니다.
더 읽을거리
https://www.inflearn.com/course/php7-reboot