PHP로 WEB 애플리케이션의 프레임워크를 만들어 보세요(PHP가 만든 오리지널 프레임워크)

개요


여러분들은 개발할 때 프레임을 이용하시나요?
WEB 프로그램을 제작할 때 프레임워크를 이용하여 화면 템플릿(HTML/CSS/JS)과 설치(프로그래밍)를 분리할 수 있는 장점을 누릴 수 있다고 생각합니다.하지만 갑자기 복잡한 프레임으로 구축하면'잘 모르면서 시스템, 사이트가 완성됐다'는 말이 된다.
프레임워크를 정확하게 이용하기 위해서는 프레임워크의 코드를 읽는 것이 필요하지만 일반적인 프레임워크는 많은 파일과 코드가 연결되어 복잡하다.요청(입력)부터 응답(화면 표시)까지 순서대로 읽는 것도 쉽지 않다.
따라서 프레임워크의 기본으로서 저는 코드 학습을'화면과 실장을 분리하는'간단한 프레임워크에 한정하고 싶습니다.

운영 환경


이 글은 로컬에서 만들어지고 환경을 확인했습니다.
  • Windows10/WSL2(Ubuntu 20.04.2 LTS)
  • Apache 2.4.41
  • PHP 7.4.3
  • MariaDB 10.3.25
  • WSL2 환경을 이용한 제작 방법은 아래 기사를 참조하십시오.
    https://zenn.dev/o2z/articles/f68d7aea7c075f

    설치 요약


    이번에 우리는 '문자열 바꾸기' 만 가능한 프레임을 만들 것이다.
    화면 (}) 으로 바뀐 문자열을 끼워 넣은 다음 바꿉니다.
    1.index.php에서 프로그램과 화면 (HTML) 을 분리해서 호출하는 구조를 사용합니다.
    예: index.php -> xxx.php xxx.html
    2. 문자열을 설명하는 화면(HTML)을 바꿉니다.
    예: [%text%]
    3. 프로그램은 연상이 배열한 키로 문자열을 바꾸고 문자열을 값으로 설정합니다.
    예: $replace['text'='대체 문자'
    4. 화면(HTML)은 프로그램과 함께 제작되며 URL(이번 설치는 매개 변수)을 통해 전환됩니다.
    예: example.php와 example.세트 제작).

    디렉토리 구조


    디렉토리 구성은 다음과 같습니다.
    fw
    단수 - public 문헌 노선 (index.php)
    단수 계획 (example.php)
    칭찬 - template 화면 템플릿 (example.>)

    샘플 코드


    샘플로 코드를 써보면 이런 느낌이 든다.
    index.php
    <?php
    // デバッグ用
    error_reporting(-1);            // 「-1」= 全てのPHPエラーを出力する
    ini_set('display_errors', '1'); // 1 = 画面にエラーを表示する
    
    // 初期処理(本プログラムでセッションは使いませんが・・・)
    session_start();
    
    // 1.実行ファイル設定
    $ex = "";
    if(isset($_GET['ex'])){
        // 値受取
        $ex = $_GET['ex'];
        // 入力不可とする記号を大さっぱに無効化する
        $ex = htmlentities($ex, ENT_QUOTES, 'UTF-8');
        //「\」「.」「/」を削除する
        $ex = preg_replace('/[\\\.\/]/u','',$ex);
    } else {
        // 実行ファイル指定無しはトップページを表示する
        $ex = "top";
    }
    
    // 2.テンプレートファイル読み込み
    $html = "";
    $fp = fopen('./../template/'.$ex.'.html', 'r');
    while ($line = fgets($fp)) {
        $html .= $line;
    }
    fclose($fp);
    
    // 3.実行ファイルの読み込み
    require_once('./../execute/'.$ex.'.php');
    
    // 4.プログラム実行(置き換え文字列の連想配列を取得する)
    $replace  = array();
    $ex_class = new $ex();
    $replace  = $ex_class->execute();
    
    // 5.置き換え文字列の置換処理
    foreach( $replace as $key => $value ){
        $html = str_replace('[%'.$key. '%]',$value,$html);
    }
    
    // 6.HTML書き出し
    echo $html;
    
    ?>
    
    index.php 코드 설명
    1. 매개 변수 "ex"로 실행되는 프로그램/화면 템플릿 지정
    2. 화면 템플릿(HTML) 파일 읽기
    3. 실행 파일 읽기(PHP)
    4. 프로그램 실행 (문자열을 바꾸는 연상 배열 획득)
    5. 문자열 바꾸기와 연상 시퀀스 바꾸기
    6. HTML 쓰기
    example.php
    <?php
    // ライブラリ読込
    
    // 実行クラス
    class one {
    
      public function execute(){
        $replace = array();
    
        // 置き換え文字をセットする
        $replace['test_text'] = "置き換え文字テスト";
    
        return $replace;
      }
    
    }
    
    ?>
    
    example.php 코드 설명
    1.index.php를 통해 실례를 만들어서 "excute (") 를 실행합니다.
    2. execute()의 반환 값은 "바꿀 문자열을 Key로 설정하고 바꿀 문자열을value 값으로 설정합니다.
    example.html
    <html>
    <head>
    <title></title>
    </head>
    <body>
    <h1>this example page</h1>
    <div>[%test_text%]</div>
    </body>
    </html>
    
    example.코드 해설
    1. [%test text%]를 HTML에 대체 문자로 포함합니다.

    실행 결과


    WEB 서버의 indexphp를 호출해 보십시오.
    http://localhost/index.php?ex=example
    

    총결산


    이번엔'문자열 바꾸기'기능일 뿐이지만 실제 프레임은 화면 템플릿에서 조건 구분과 중복 이용 등 복잡한 구조를 할 수 있다.
    '잘 모르겠지만 규격에 맞춰서 OK'같은 작업방식이 되지 않도록 주의하지 않으면 바로 복사·붙여넣은 코드가 돼 사고력이 쇠퇴할 수 있다.
    나는 실제 설계를 한 후에 코드 테스트를 쓰는 것이 매우 중요하다고 생각한다.
    지금까지 PHP로 WEB 애플리케이션을 만들어 본 프레임(PHP가 만든 오리지널 프레임)이었다.어때?나는 틀을 정확하게 이해하고 사용하고 싶다.

    좋은 웹페이지 즐겨찾기