대규모 PHP 응용 프로그램을 구축 할 때 코드 조직 구조의 장점과 단점은 프로젝트의 유지 관리 및 개발 효율에 직접적인 영향을 미칩니다. PHP가 제공하는 get_include_path () 및 set_include_path ()는 경로 (포함)를 설정하고 얻는 데 사용되는 두 가지 매우 실용적인 기능입니다. 이들의 도움으로 여러 디렉토리에서 클래스 파일, 구성 파일, 라이브러리 및 기타 리소스를 효율적으로 찾아로드 할 수 있습니다.
include_path는 PHP 가 실행할 때 파일을 검색하는 경로의 경로 목록입니다 . 본질적으로 시스템 경로 분리기와 연결된 경로 문자열 세트입니다. 예를 들어, UNIX 시스템에서는 다음과 같습니다.
/usr/local/lib/php:/home/user/project/includes
이것은 당신이 전화 할 때 :
include 'myClass.php';
PHP는 /usr/local/lib/php 및 /home/user/project/include의 myclass.php 파일을 찾습니다.
get_include_path ()는 현재 include_path 구성을 얻는 데 사용됩니다. 그것의 일반적인 사용은 디버깅 또는 동적으로 추가 된 경로를위한 것입니다.
echo get_include_path();
또는 set_include_path () 와 함께 사용하십시오.
$path = get_include_path();
set_include_path($path . PATH_SEPARATOR . '/home/user/project/lib');
중간 및 대형 PHP 응용 프로그램에서 코드는 종종 여러 디렉토리에 배포됩니다.
핵심 라이브러리 : /코어
컨트롤러 : /앱 /컨트롤러
모델 : /앱 /모델
타사 도서관 : /벤더
파일을로드 할 때마다 절대 경로가 사용되면 코드는 길고 유지 관리가 어렵습니다. include_path를 설정하면 이러한 모든 디렉토리를 경로에 추가 할 수 있습니다.
set_include_path(
implode(PATH_SEPARATOR, [
'/var/www/html/core',
'/var/www/html/app/controllers',
'/var/www/html/app/models',
'/var/www/html/vendor',
get_include_path()
])
);
일단 설정되면 경로에 대해 걱정하지 않고 클래스 또는 구성 파일을 쉽게로드 할 수 있습니다.
require_once 'UserController.php';
require_once 'Database.php';
효율을 더욱 향상시키기 위해 일반적으로 SPL_AUTOLOAD_REGISTER () 사용과 같은 자동 로딩 메커니즘과 함께 사용됩니다.
spl_autoload_register(function ($className) {
include $className . '.php';
});
Conture_Path 와 결합하여 PHP는 모든 세트 경로에서 $ classname.php 파일을 찾습니다. 이렇게하면 프레임 워크를 도입하지 않고 PSR-0/PSR-4와 같은 자동 로딩을 구현할 수 있습니다.
php.ini 에서 전 세계적으로 include_path를 설정할 수 있습니다.
include_path = ".:/var/www/html/includes:/var/www/html/vendor"
또는 .htaccess 파일 (Apache 만 해당)으로 설정하십시오.
php_value include_path ".:/var/www/html/includes:/var/www/html/vendor"
물론 가장 유연한 방법은 입력 파일에서 동적으로 설정하여 다른 배포 환경에 따라 경로 구조를 자유롭게 조정할 수 있도록하는 것입니다.
define('BASE_PATH', dirname(__FILE__));
set_include_path(
implode(PATH_SEPARATOR, [
BASE_PATH . '/core',
BASE_PATH . '/lib',
BASE_PATH . '/modules',
BASE_PATH . '/vendor',
get_include_path()
])
);
엔터프라이즈 수준 시스템을 개발하고 있다고 가정하면 디렉토리 구조는 다음과 같습니다.
/var/www/html/
├── index.php
├── core/
│ └── App.php
├── lib/
│ └── Utils.php
├── modules/
│ └── Auth.php
├── vendor/
│ └── autoload.php
경로를 Index.php 로 설정하고 사용하십시오.
define('BASE_PATH', __DIR__);
set_include_path(
implode(PATH_SEPARATOR, [
BASE_PATH . '/core',
BASE_PATH . '/lib',
BASE_PATH . '/modules',
BASE_PATH . '/vendor',
get_include_path()
])
);
require_once 'App.php';
require_once 'Utils.php';
require_once 'Auth.php';
이러한 모듈 간에도 상호 의존성이있는 경우이 메커니즘은 모듈 재사용 성 및 코드 유지 관리 가능성을 크게 향상시킵니다.
PHP는 include_path의 경로 순서대로 파일을 검색합니다. 따라서 파일의 잘못된 버전으로로드되는 것을 방지하기 위해 경로의 우선 순위를 신중하게 배열해야합니다. 예를 들어, 타사 경로 앞에 지역 프로젝트로가는 경로를 배치 할 수 있습니다.
set_include_path(
implode(PATH_SEPARATOR, [
BASE_PATH . '/app',
BASE_PATH . '/lib',
BASE_PATH . '/vendor/gitbox.net/framework',
get_include_path()
])
);
get_include_path () 및 set_include_path () 는 대규모 PHP 응용 프로그램을 구성하는 데 없어서는 안될 도구입니다. 포함 _path를 합리적으로 구성하고 자동로드 메커니즘과 결합함으로써 코드 로딩은 더 똑똑하고 간결 할 수 있습니다. 이는 여러 서브 모듈, 라이브러리 및 구성 요소를 사용하는 대규모 프로젝트에 대한 디커플링 및 모듈화를 달성하는 데 중요한 단계입니다.
몇 줄의 구성만으로 PHP 응용 프로그램은 구조와 유지 관리에 큰 단계를 밟을 수 있습니다.