우리는 종종 PHP 프레임 워크 개발 에서이 단어를 듣습니다. 일반적으로 "초기화"를 위해 구성 파일, 핵심 클래스 또는 서비스 제공 업체에 나타납니다. 그렇다면 프레임 워크 런칭 프로세스에서 어떤 역할을 했습니까? 왜 중요한가요? 이 기사를 깊이 분석해 봅시다.
"init"라는 단어는 초기화 에서 비롯됩니다. 이는 초기화를 의미합니다. 핵심 목적은 시스템이 공식적으로 실행되기 전에 필요한 준비를하는 것입니다.
PHP 프레임 워크에서 INT 함수는 일반적으로 다음을 담당합니다.
구성 파일로드
서비스 또는 구성 요소를 등록하십시오
글로벌 변수 또는 상수를 초기화합니다
구성 오류 처리, 로깅
데이터베이스 연결 및 기타 리소스를 설정하십시오
다시 말해, 프레임 워크가 시작되기 전에 준비 링크입니다 .
간단한 예를 사용해 봅시다. 일반적인 PHP 프레임 워크에는 이러한 항목 파일 index.php 가있을 수 있습니다.
<?php
require_once 'vendor/autoload.php';
$app = new App();
$app->init();
$app->run();
이 예에서 $ app-> init ()는 초기화의 핵심 단계입니다. 일반적으로 다음을 수행합니다.
public function init()
{
$this->loadConfig();
$this->registerServices();
$this->setupErrorHandling();
}
loadConfig () : 구성/ 디렉토리의로드 데이터베이스, 캐시, 이메일 및 기타 구성.
RegisterServices () : 컨테이너에 코어 서비스 (예 : 라우팅, 세션, 캐시)를 등록하십시오.
setuperrorhandling () : 예외 핸들러 또는 오류 로그를 설정합니다.
이 단계가 없으면 구성 부족 및 서비스 실패로 인해 Run () 함수가 직접 충돌 할 수 있습니다.
특정 Init 구현을 볼 수있는 간단한 프레임 워크가 있다고 가정합니다.
<?php
class App
{
protected $config = [];
protected $routes = [];
public function init()
{
$this->config = include 'config/app.php';
$this->registerRoutes();
}
protected function registerRoutes()
{
$this->routes = [
'/' => 'HomeController@index',
'/about' => 'AboutController@show',
];
}
public function run()
{
$uri = $_SERVER['REQUEST_URI'];
if (isset($this->routes[$uri])) {
list($controller, $method) = explode('@', $this->routes[$uri]);
(new $controller)->$method();
} else {
echo "404 Not Found";
}
}
}
구성 파일 config/app.php를 가정합니다.
<?php
return [
'base_url' => 'https://gitbox.net',
'db' => [
'host' => 'localhost',
'user' => 'root',
'pass' => '',
],
];
여기에서 init ()는 경로 일치 및 컨트롤러 실행 전에 시스템의 기본 구성이로드되었는지 확인합니다.
왜 이것들이 생성자에서 직접하지 않습니까? 이유가 포함됩니다.
? 책임 분리 : 생성자는 객체의 기본 생성을 담당하는 반면 Init는 초기화 로직에 중점을 둡니다.
? 제어 가능한 스타트 업 : 경우에 따라 프레임 워크를 인스턴스화하면되지만 프레임 워크를 실행하지 않으며 Init를 호출하지 않도록 선택할 수 있습니다.
? Easy Extension : 서브 클래스는 INIT 메소드를 무시하고 구성 프로세스를 방해하지 않고 초기화 단계를 사용자 정의 할 수 있습니다.
Laravel 및 Symfony와 같은 성숙한 프레임 워크는 표면에서 init () 이라고 불리는 기능을 볼 수는 없지만, 스타트 업 동안 모두 비슷한 단계를 가지고 있습니다.
Laravel의 Bootstrap/App.php는 응용 프로그램 인스턴스를 준비하는 데 사용됩니다.
Symfony 's Kernel :: InitializeContainer ()는 서비스 컨테이너를 초기화하는 데 사용됩니다.
이들은 모두 init 아이디어의 표현 입니다. 응용 프로그램이 실행되기 전에 필요한 환경을 구축하십시오.