⊗ppOpNsCA 107 of 107 menu

PHP OOP에서 사용자 정의 클래스 자동 로드 함수 만들기

기본 자동 로드 기능이 어떤 이유로든 마음에 들지 않을 수 있습니다. 이 경우 사용자 정의 자동 로드를 작성할 수 있습니다.

이를 위해 spl_autoload_register 함수에 첫 번째 매개변수로 작성한 콜백 함수를 전달해야 합니다. 이 함수는 PHP가 로드되지 않은 클래스에 대한 접근을 감지할 때 호출됩니다. 이 함수의 매개변수에는 네임스페이스를 포함한 클래스 이름이 전달됩니다:

<?php spl_autoload_register(function($class) { // $class 변수에는 네임스페이스를 포함한 클래스 이름이 들어갑니다. }); ?>

그리고 이 함수의 책임은 클래스 이름을 기준으로 require를 통해 해당 클래스를 로드하는 것입니다. 즉, 이 함수 내에서 클래스 로드를 위한 자체 규칙, 즉 자체 명명 규약을 작성해야 합니다.

사용자 정의 자동 로드의 예를 작성해 보겠습니다. 예를 들어, 클래스 파일의 경로가 사이트 루트부터 네임스페이스와 동일하되 대소문자를 유지한다고 가정해 봅시다.

즉, Core\Admin\PageController 클래스가 있다면, 해당 경로는 Core/Admin/PageController.php가 되어야 합니다.

보시다시피, 네임스페이스를 포함한 클래스 이름을 변환하려면 백슬래시를 슬래시로 변경하고 클래스 이름에 .php를 추가하기만 하면 됩니다. 이를 구현해 보겠습니다:

<?php spl_autoload_register(function($class) { $filename = str_replace('\\', '/', $class) . '.php'; require($filename); }); ?>

그러나 파일에 대한 상대 경로(사이트 루트 기준)가 생성됩니다. 절대 경로로 만드는 것이 더 좋습니다. 다음과 같이 하세요:

<?php spl_autoload_register(function($class) { $root = $_SERVER['DOCUMENT_ROOT']; $filename = $root . '/' . str_replace('\\', '/', $class) . '.php'; require($filename); }); ?>

또 다른 미묘한 차이가 있습니다. 다양한 운영 체제에서 폴더 경로는 슬래시 또는 백슬래시로 구분될 수 있습니다. 운영 체제에 독립적인 코드를 만들어 보겠습니다. 이를 위해 경로 구분자로 슬래시 대신 현재 스크립트가 실행 중인 운영 체제의 올바른 구분자를 포함하는 상수 DIRECTORY_SEPARATOR를 사용하겠습니다. 결과적으로 다음 코드를 얻습니다:

<?php spl_autoload_register(function($class) { $root = $_SERVER['DOCUMENT_ROOT']; $ds = DIRECTORY_SEPARATOR; $filename = $root . $ds . str_replace('\\', $ds, $class) . '.php'; require($filename); }); ?>

제가 만든 자동 로드 함수를 테스트해 보세요.

자신만의 자동 로드 규칙을 생각해 내고 구현해 보세요.

한국어
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақКыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
우리는 웹사이트 운영, 분석 및 개인화를 위해 쿠키를 사용합니다. 데이터 처리는 개인정보 처리방침에 따라 이루어집니다.
모두 수락 설정 거부