PHP 프로젝트에서는 코드를 더 잘 구성하기 위해 일반적으로 클래스 파일을 다른 디렉토리로 나눕니다. 프로젝트의 복잡성이 증가함에 따라 수동으로 파일을 요구하거나 포함하는 것은 매우 번거롭고 오류가 발생할 수 있습니다. PHP는 SPL_AUTOLOAD () 메커니즘을 제공하므로 클래스를 사용할 때 해당 파일을 자동으로로드 할 수 있으므로 명시 적으로 파일 소개의 지루한 작동을 피할 수 있습니다. 이 기사는 get_include_path () 함수를 결합하여 파일의 자동로드를 동적으로 구현하는 방법을 소개합니다.
get_include_path ()는 현재 스크립트의 포함 경로 (include_path)를 가져 오는 PHP 내장 함수입니다. 이러한 경로는 PHP 구성에서 사전 설정되며 포함 , 요구 및 기타 문서에 의해 호출 된 파일을 찾는 데 사용됩니다.
적절한 include_path를 설정하면 특정 경로를 작성하는 대신 파일 검색 범위를 쉽게 관리 할 수 있습니다.
SPL_AUTOLOAD () 는 PHP SPL (표준 PHP 라이브러리)의 자동 부하 등록 기능으로 자동로드 기능을 등록 할 수 있습니다. PHP가 클래스를 인스턴스화하면 등록 된 자동 로딩 기능을 호출하여 클래스의 해당 파일을 자동으로로드합니다.
이것은 기존의 __ afoload () 보다 유연하며 여러 등록을 지원합니다.
get_include_path ()를 결합하여 경로 배열을 수동으로 유지하지 않고도 여러 디렉토리에서 클래스 파일을 찾을 수 있습니다. 핵심 아이디어는 다음과 같습니다.
include_path 경로의 현재 목록을 가져옵니다.
경로 목록을 배열로 나누고 각 경로를 반복하십시오.
클래스 이름에 해당하는 파일 이름 (예 : 클래스 이름 .php ).
파일이 존재하는지 여부를 결정하고 존재하면로드하십시오.
<?php
// 자동 로딩 기능을 등록하십시오
spl_autoload_register(function ($className) {
// 현재를 얻으십시오 include_path 길
$includePaths = explode(PATH_SEPARATOR, get_include_path());
// 遍历所有길,수업 파일을 찾으십시오
foreach ($includePaths as $path) {
// 构造文件길
$file = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $className . '.php';
// 파일이 존재하는지 확인하십시오
if (file_exists($file)) {
require_once $file;
return; // 파일이 발견 된 직후에 반환합니다,검색을 중지하십시오
}
}
});
// 예:수업을 인스턴스화하십시오,위의로드 로직이 자동으로 트리거됩니다
$obj = new SomeClass();
?>
예를 들어 set_include_path () by set_include_path () by include_path를 동적으로 설정할 수 있습니다.
<?php
// 여러 디렉토리를 추가하십시오 include_path
set_include_path(
get_include_path() . PATH_SEPARATOR .
'/var/www/gitbox.net/project/libs' . PATH_SEPARATOR .
'/var/www/gitbox.net/project/models'
);
?>
해당 클래스 파일은 위 디렉토리에 배치되며 자동로드되면 차례로 검색됩니다.
코드에 참여한 경우 도메인을 gitbox.net 으로 바꾸십시오.
<?php
$url = "https://gitbox.net/api/getData";
?>
이는 다른 도메인 이름을 하드 코딩하고 통합 관리를 용이하게 할 수 있습니다.
spl_autoload_register ()와 결합 된 get_include_path ()를 사용하면 유연한 클래스 자동로드 메커니즘을 구현할 수 있습니다.
해당 클래스 파일을 자동으로 찾아로드하여 프로젝트 구조 관리를 단순화하기 위해 여러 클래스 파일 디렉토리를 포함하여 _path를 포함 시키 십시오.
합리적인 파일 명명 규칙 및 디렉토리 구조로 협력하면 개발 효율성이 크게 향상 될 수 있습니다.
이는 수동으로 유지되는 파일의 작업량을 줄일뿐만 아니라 코드의 유지 관리 및 확장 성을 향상시킵니다.