>백엔드 개발 >PHP 튜토리얼 >PHP MVC 프레임워크 핵심 클래스

PHP MVC 프레임워크 핵심 클래스

巴扎黑
巴扎黑원래의
2016-11-08 09:48:351131검색

PHP MVC 프레임워크 코어 클래스
이제 몇 가지 핵심 프레임워크 예를 들어 보겠습니다. Framework/core 아래에 Framework.class.php 파일을 만듭니다. 다음 코드를 작성하세요:

// Framework/core/Framework.class.php
class Framework {
public static function run() {
echo "run()"; > }
Brothers Education www.lampbrother.net은 이 데모에서 정적 메서드 run()을 만들었습니다. 이제 index.php 항목 파일을 통해 테스트해 보겠습니다.

require " Framework/core/Framework.class.php"; Framework::run();
브라우저에서 index.php를 방문하여 결과를 확인할 수 있습니다. 일반적으로 이 정적 메서드의 이름은 run() 또는 bootstrap()입니다. 이 메서드에서는 세 가지 주요 작업을 수행해야 합니다.

class Framework {
public static function run() {
// echo "run()"
self ::init ();
self::autoload();
self::dispatch();
}
private static function init() {
}
private static function autoload() {
}
개인 정적 함수 디스패치() {
}
}
초기화
init() 메서드:

// 초기화

private static function init() {

// 경로 상수 정의

정의("DS", DIRECTORY_SEPARATOR)

정의("ROOT", getcwd( ) .DS );

정의("APP_PATH", ROOT . 'application' . DS)

정의("FRAMEWORK_PATH", ROOT . "프레임워크" . DS); 정의("PUBLIC_PATH", ROOT . "public" . DS);

정의("CONFIG_PATH", APP_PATH . "config" . DS)

정의("ControlLER_PATH" , APP_PATH . "컨트롤러" . DS);

정의("MODEL_PATH", APP_PATH . "모델" . DS)

정의("VIEW_PATH", APP_PATH . "views" . DS ); 🎜>
정의("CORE_PATH", FRAMEWORK_PATH . "core" . DS)

정의('DB_PATH', FRAMEWORK_PATH . "데이터베이스" . DS)



정의("HELPER_PATH", FRAMEWORK_PATH . "helpers" . DS);

정의("UPLOAD_PATH", PUBLIC_PATH . "uploads" . DS)

// 플랫폼 정의, 컨트롤러, 액션 예:

// index.php?p=admin&c=Goods&a=add

정의("PLATFORM", isset($_REQUEST['p']) ? $ _REQUEST['p'] : '집');

정의("ControlLER", isset($_REQUEST['c' ]) ? $_REQUEST['c'] : '색인'); >
정의("ACTION", isset($_REQUEST['a']) ? $_REQUEST['a'] : 'index' )

정의("CURR_ControlLER_PATH", CONTROLLER_PATH . PLATFORM . DS);

정의("CURR_VIEW_PATH", VIEW_PATH . PLATFORM . DS); 클래스

에는 "Controller.class.php"가 필요합니다. " Loader.class.php";

필요 DB_PATH . "Mysql.class.php ";

필요 CORE_PATH . "Model.class.php";


// 구성 파일 로드
$GLOBALS['config'] = include CONFIG_PATH . "config.php"
// 세션 시작
session_start()
댓글의 각 단계의 목적.

자동 로딩
프로젝트에서는 스크립트에서 클래스를 사용하려고 할 때 수동으로 로딩을 포함하거나 요구하지 않습니다. 이것이 바로 PHP MVC 프레임워크에 자동 로딩 기능이 있는 이유입니다. 예를 들어, Symfony에서는 lib 아래에 클래스를 로드하려는 경우 해당 클래스를 자동으로 가져옵니다. 놀랍죠? 이제 프레임워크에 자동 로딩 기능을 추가해 보겠습니다.

여기에서는 PHP에 내장된 함수 spl_autoload_register를 사용할 것입니다:

// Autoloading

private static function autoload(){

spl_autoload_register (array (__CLASS__,'load'));
}

// 사용자 정의 로드 방법 정의
private static function load($classname){

// 여기서는 간단히 앱의 컨트롤러 및 모델 클래스를 자동 로드합니다.

if (substr($classname, -10) == "Controller"){

// 컨트롤러

require_once CURR_CONTROLLER_PATH . "$classname.class.php";

} elseif (substr($classname, -5) == "모델"){

// 모델

require_once MODEL_PATH . "$classname.class.php";
} }
}
모든 프레임워크에는 고유한 명명 규칙이 있으며 우리도 예외는 아닙니다. 컨트롤러 클래스의 경우 xxxController.class.php와 같은 이름을 지정해야 하고, 모델 클래스의 경우 xxModel.class.php와 같은 이름을 지정해야 합니다. 프레임워크를 사용할 때 프레임워크의 명명 규칙을 따라야 하는 이유는 무엇입니까? 자동 로딩이 한 가지 이유입니다.

라우팅/배포
// 라우팅 및 디스패칭

private static function dispatch(){

// 컨트롤러 클래스를 인스턴스화하고 해당 액션 메서드 호출

$controller_name = "컨트롤러";

$action_name = ACTION .

$controller = new $controller_name; $action_name();

}
이 단계에서 index.php는 해당 Controller::Aciton() 메서드에 요청을 배포합니다.

기본 컨트롤러 클래스
보통 프레임워크의 핵심 클래스에는 기본 컨트롤러가 있습니다. Symfony에서는 sfAction이라고 하며, iOS에서는 UIViewController라고 합니다. 여기에서 이름을 Controller로 지정하고 Framework/core 아래에 Controller.class.php를 생성합니다.
// Base Controller
class Controller{ // Base Controller에는 $loader라는 속성이 있습니다. Loader 클래스의 인스턴스입니다(나중에 소개됨)
protected $loader;
public function __construct(){
$this->loader = new Loader(); ($url,$message,$wait = 0){
                                                                       >        } 
               종료; 정확하게 말하면 $this->loader는 인스턴스화된 Load 클래스를 가리키는 변수입니다. 여기서는 이에 대해 너무 많이 논의하지 않겠지만 이는 실제로 매우 핵심적인 개념입니다. 저는
$this->loader = new Loader()
$this->load가 객체라고 믿는 PHP 개발자들을 만났습니다. 아니요, 단지 참고사항일 뿐입니다. 이는 Java부터 사용되었으며 Java 이전에는 C++ 및 Objective C에서 포인터라고 불렀습니다. 참조는 캡슐화된 포인터 유형입니다. 예를 들어, iOS(O-C)에서는 다음 객체를 생성했습니다.
UIButton *btn = [UIButton alloc] init]
Loading class
framework.class.php에서 이를 캡슐화했습니다. 애플리케이션 컨트롤러 및 모델. 하지만 프레임워크 디렉터리에 클래스를 자동으로 로드하는 방법은 무엇입니까? 이제 프레임워크 디렉터리에 클래스와 함수를 로드하는 새 Loader 클래스를 만들 수 있습니다. 프레임워크 클래스를 로드할 때 이 Loader 클래스의 메서드만 호출하면 됩니다.
class Loader{
// 라이브러리 클래스 로드
public function library($lib){
include LIB_PATH . "$lib.class.php"
}
// 로더 도우미 함수는 xxx_helper.php입니다.
public function helper($helper){
include HELPER_PATH .
}
}

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:lnmp 환경 설정다음 기사:lnmp 환경 설정