개발 꿀팁/PHP

나만의 PHP 프레임워크 구축하기 (3)

Jammie 2022. 9. 29. 14:56
반응형

속언
이어 자체 PHP 프레임워크를 보완해 이번 업데이트의 주요 내용은 다음과 같다.

이상 처리 메커니즘을 소개하였다
이상과 오류 처리를 보완했다
데이터 테이블과 Model 클래스 매핑

이상 처리

이상 처리: 이상 처리는 프로그래밍 언어 또는 컴퓨터 하드웨어의 한 메커니즘으로 소프트웨어 또는 정보 시스템에서 발생하는 이상 상황을 처리하는 데 사용됩니다(즉, 프로그램의 정상적인 실행 흐름을 벗어난 특수한 조건)

이상 처리는 프로그램의 이상 상태를 처리하는 데 사용되며, 비록 '이상 상태'라고 하지만 여전히 프로그래머의 예상대로 프로그램의 이상 처리는 'ifelse' 문구로 대체될 수 있지만, 당연히 이상 처리는 장점이 있습니다.

개인적으로 그 장점을 정리하면 다음과 같다.

빠른 프로세스 종료, 시스템 상태 재설정, 변수와 메모리 점유 청소가 가능하며, 일반 WEB 어플리케이션에서는 한 번의 요청이 끝나면 FAST CGI가 변수와 컨텍스트를 자동으로 청소하지만 PHP의 명령줄 모드에서 데몬 스크립트를 실행할 경우 그 효과편할 거예요.
많은 수의 ifelse 문장은 코드를 복잡하고 어렵게 만들고 예외 처리를 사용하면 프로그램 논리를 더 명확하고 이해하기 쉽게 만들 수 있습니다

1량 프로그램의 함수에 비정상적인 결과 또는 상황이 발생하면 함수의 return 방식을 사용하여 비정상적인 정보를 반환하면 층이 위로 올라가며 매번 return 판단을 수행해야 합니다.예외 처리를 사용하면 모든 반환 정보가 정상이며 많은 코드 중복을 피할 수 있다고 가정할 수 있습니다.
트라이캐치 블록에 코드를 넣으면 효율이 약간 떨어지지만 이런 장점과 비교하면 소모는 별거 아니다.그럼 PHP의 이상 처리는 어떻게 사용하나요?

PHP에는 Exception 클래스가 내장되어 있어 비정상적인 클래스를 인스턴스화하여 예외를 제거할 수 있습니다.우리는 코드를 try 문에 넣고 실행한 다음 catch를 사용하여 try 코드 블록에서 던져진 이상을 포착하고 이상을 처리하려고 시도했습니다.우리는 또한 catch 코드 세그먼트 후에 finally 문 블록을 사용할 수 있으며, 이상이 있든 없든 finally 코드 블록의 코드를 실행할 수 있으며, try catch 문 형태는 다음과 같습니다

try{
    throw new Exeption('msg'[,'code',$previous_exeception]);
}catch(Exeption $var) {
    process($var);
}catch(MyException $e){
    process($e)
}finally{
    dosomething();
}

try catch 문장을 사용할 때 주의해야 합니다.

우리가 이상을 던질 때, 하나의 이상 클래스를 인스턴스화한다.비정상 클래스는 자체 정의할 수 있지만 캐치 문에서는 캡처할 비정상 객체의 클래스 이름을 지정해야 하며 특정 클래스의 비정상 객체만 캡처할 수 있습니다. 물론 마지막으로 비정상 기본 클래스(PHP 내장 비정상 클래스)를 캡처하여 이상이 반드시 캡처되도록 할 수 있습니다.
이상을 던지면, 프로그램이 종료되고, 코드를 거슬러 올라가 찾는다.이를 캡처할 수 있는 첫 번째 catch 문까지 try catch 문은 중첩될 수 있으며 위의 코드와 같이 cacth 문은 여러 번 정의할 수 있습니다.
finally 블록은 try catch 블록에 있습니다.실행이 끝나면 try catch 블록에서 return을 사용하여 반환하더라도 프로그램이 끝까지 실행되지 않습니다

프레임 내 이상 처리
이상 관련을 그렇게 많이 얘기했는데(물론 그걸 해석하는 것도 틀을 이해하고 사용하기 위해서지만) 그럼 틀 안에서 어떻게 해야 할까요?

예외 클래스 다시 쓰기
우리는 이상류를 다시 쓸 수 있다., 그 내부 방법을 보완한다:

<?php  
class Exception  
{  
    protected $message = 'Unknown exception';   // 이상 정보
    protected $code = 0;                        // 이상코드
    protected $file;                            // 이상이 발생한 파일 이름
    protected $line;                            // 이상 발생 코드 행 번호

    function __construct($message = null, $code = null,$previous_exeception = null);  

    final function getMessage();                // 이상 정보를 반환하다
    final function getCode();                   // 예외 코드 반환
    final function getFile();                   // 오류가 발생한 파일 이름을 반환합니다.
    final function getLine();                   // 오류가 발생한 코드 줄 번호를 반환합니다
    final function getTrace();                  // 예외 trace 배열 되돌리기
    final function getTraceAsString();          // 예외 trace 정보 반환

    /**
     * 오류 로그 기록
     */
    protected function log(){
        Logger::debug();
    }
}

방법은 위와 같이 final 가능한 안 될 수 있고 이 외에도 자신의 방법을 정의하고 로그 기록을 나와 같은 이상이 교차된 코드 방법은 log을 통해 catch 블록 바로 사용할 수 있게 한개 이상을 기록 $ e->log. 로그

등록 방법. 이상한 전역
우리는 ('exceptionHandler')을 사용할 수 있지 않았다 전체 포획 set_exception_handler된 catch 블록에 이상이 생겨 포획 처리에 필요 이상 1개 이상 함수 처리 대상으로 유입될 수 있게 해.이 정보를 분석한 예외 처리다.인간적 피하는 시스템이 나오지 않고 있는 건장한 틀을 제시하고 있다. 성을 증강

function exceptionHandler($e) {
    echo '잡히지 않은 이상이 있습니다,있다' . $e->getFile() . "의" . $e->getLine() . "行!";
}

다른 전역 함수.
다른 김에 좀 처리하고 얘기하자 함수:전역 한다.

set_shutdown_function ( ' s끝날 때 스크립트를 실행하는 hutDownHandler ' )의 함수는 함수를 마친 뒤에도 ERROR 자동 호출이 있다.
set_error_handler ( ' error오류가 발생할 때 PHP Handler ' ) 자동으로 호출해야 하고 있는 함수가 등록된 뒤에야 오류를 낼 수 있다. 잘못된 호출함수에 매개 변수 형식을 하고 있다. ( $ errno $ er $ errstr, rfile $ errline ) ;
함수에 주의해야 하지만 이들은 전역이 필요한 코드를 정의하고 있다. 앞에서 이미단본 적이 없다. 더 이상 등록

 

테이블과 Model 클래스의 ActiveRecord 매핑
yii2의 Activce Record 장르를 처음 써보는 게 좋은 것 같아요.편리합니다, 필드의 동일한 이름의 속성을 정의하고 Save 메서드를 호출하기만 하면 됩니다(신기하네요), 어떻게 구현되는지, 소스 코드를 보고 대략적인 구현 프로세스(베이스 클래스)를 이해했습니다.

'describe table_name'으로 쿼리하기어구
분석조회 결과: 각 필드에 대해 Field(필드명),Type(데이터 형식), Null(비어 있는지 여부), Key(인덱스 정보, 'PRI'는 기본 키로 표시), Default(기본값), Extra(예: auto_increment)
주키 판단으로 ($row['KEY'] == 'PRI') 정보는 저장할 때 기본 키 정보가 있는지 확인하고, 존재하면 업데이트하고, 존재하지 않으면 삽입합니다.
또한, 해석된 필드 정보는 더 많은 유용한 정보를 제공합니다~~

결말
오랜만에 블로그를 쓰는 것 같아서 '졸업'은 전공 공부와 같은 방식으로 공부하는 사람에게 좀 번거롭습니다. 학교에 대한 미련을 잘 간직하고 계속 출발합니다.

정말 공부하면 할수록 자신이 인식이 부족하다고 느껴지고, PHP 프레임 소스를 볼 때 자신이 아직 멀었다는 느낌을 받을 때가 있습니다. 그 일체감과 레이아웃감은 아마 필요할 것입니다.시간과 경험을 쌓아라.

프레임 적용은 현재 자신의 업무와 크게 관계가 있지 않고, 요즘 스스로 프로그래밍의 밑바닥에 있는 것들을 열심히 배우고 있기 때문에 프레임 시리즈는 조금 있을 수 있습니다.'변비', 다른 거 쓰는데...요 며칠 다른 곳에서 살려고, 집을 보러 뛰어다녔어, 내가 좀 짧은 걸 용서해 줘.

하하, 제 블로그에 계속 관심 가져주세요, 네, 항상 신경 쓰고 있어요.

 

반응형