개발 꿀팁/PHP

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

Jammie 2022. 9. 29. 15:12
반응형

속언
이번 업데이트에 대해 다음과 같이 말하고 싶습니다.

본 틀은 본인이 시간을 정해 완성하고, 나는 아직PHP 대신급 인물이 아니기 때문에 틀의 허점을 지적할 수밖에 없다.
이 프레임워크의 지식 기반 응용 프로그램은 모두 블로그에 쓰여집니다.여러분, 이의가 있으면 함께 토론하고, 블로그를 보는 분들도 배울 수 있기를 바랍니다.
이번 업데이트는, 함수 규범상의 1을 갱신하였다.함수를 최대한 독립화하는 것과 같은 일부 문제는 함수 의존성을 최소화하기 위해 각 함수가 가능한 한 하나만 수행하도록 노력해야 합니다.프레임워크의 전체도 최적화되었으며 글로벌 함수와 변수를 처리하기 위해 SQ 글로벌 클래스가 추가되었습니다.
GITHUB 주소 다시 붙여넣기: Sqier 프레임 GITHUB 주소

콜백 함수
클래스 이름의 매우 low를 인스턴스화한 다음 PHP의 콜백 함수 방식을 사용하여 메서드 이름의 사용법을 바꿉니다.

원본 코드:

$controller_name = 'Controller\\' . self::$c_name;
$action_name = self::$a_name . 'Action';
$controller = new $controller_name();
$controller->$action_name();

수정된 코드

 $controller_name = 'Controller\\' . self::$c_name;
    $controller = new $controller_name();
    call_user_func([
        $controller,
        self::$a_name . 'Action'
    ]);

여기서 PHP의 함수 콜백 적용 방법을 소개합니다: call_user_func 및 call_user_func_array:

call_user_func (callback $function [, mixed $parameter [, mixed $...])

첫 번째 매개변수가 제공하는 사용자 정의 함수를 호출합니다.

반환 값은 호출 함수의 결과 또는 FALSE를 반환합니다.

call_user_func_array()의 용법은 call_user_func와 유사하지만 들어오는 매개변수 params가 전체적으로 배열입니다.

또한, call_user_func 계열 함수는 첫 번째 매개 변수에서 익명 매개 변수를 가져올 수 있으므로, 어떤 사건을 편리하게 콜백할 수 있으며, 이러한 특성은 복잡한 틀에서 응용될 수 있다.또한 yii2의 이벤트 메커니즘에서 콜백 함수의 사용과 같이 매우 광범위합니다

VIEW 계층 및 ob 함수
프레임이 controll에 있음er의 기본 클래스는 페이지를 렌더링하기 위해 render 방법을 정의하고 클래스 VIEW의 정적 함수를 호출하여 해당 페이지를 로드하는 템플릿을 분석합니다

public static function display($data, $view_file) {

    if(is_array($data)) {
       extract($data); //extract 함수 해석$data 배열의 변수
    }else {
        //변수 유형 예외 내보내기
    }

    ob_start();
    ob_implicit_flush(0);
    include self::checkTemplate($view_file);//사용자 정의 checkTemplate 함수, 해당 함수 템플릿 분석 및 검사, 정상 반환 경로
    $content = ob_get_clean();

    echo $content;
}

여기서 ob(output buffering) 계열의 함수를 중점적으로 말하고, 그 역할은 간명대 마법의 ob 역할을 인용하여 소개한다.

브라우저에 출력이 있는 후에 setcookie, 또는 header, session_start 함수로 인한 것을 방지합니다.에러. 사실 이런 용법은 적게 쓰는 것이 좋고, 좋은 코드 습관을 기르는 것이 좋습니다.
phpinfo와 같이 얻을 수 없는 함수에 대한 출력을 캡처하면 HTML이 대량으로 출력되지만, 우리는 $와 같은 변수를 사용할 수 없습니다.info=phpinfo(); 잡아내면 ob이 효과가 있다.
gzip 압축, 단순 변환, 일부 문자열 교체와 같은 출력 콘텐츠를 처리합니다.
정적 파일을 생성하는 것은 실제로 전체 페이지의 출력을 캡처한 다음 파일로 저장하는 것으로 HTML을 생성하거나 전체 페이지 캐시에 자주 사용됩니다.
그것은 ob_start() 함수가 실행된 후 버퍼를 열고, 뒤에 나오는 출력물을 시스템의 버퍼에 넣습니다. ob_implicit_flush(0) 함수는 절대 브러시(echo 등)를 끄고 마지막으로 ob_get_clean() 함수를 사용하여 버퍼의 내용을 가져옵니다

 

클래스__URL_상수 및 전역 클래스
TP의 __URL__과 같은 전역 일반양은 매우 편리하고 점프와 같은 조작을 쉽게 실현할 수 있으며, 그것을 정의하는 함수 createUrl 함수는 다시 사용하고 싶기 때문에 YII의 글로벌 클래스 정의 방법을 참고합니다.

기본 클래스 및 상세 메서드 정의(이후 전체)방법은 여기에 적혀있습니다)

class BaseSqier{
    //메서드는 들어오는 $info 정보와 현재 URL_MODE 해석에 따라 URL 문자열을 반환합니다
    public static function createUrl($info = '') {
        $url_info = explode('/', strtolower($info));
        $controller = isset($url_info[1]) ? $url_info[0] : strtolower(CONTROLLER);
        $action = isset($url_info[1]) ? $url_info[1] : $url_info[0];
        switch(URL_MODE){
            case URL_COMMON:
                return "/index.php?r=" . $controller . '/' . $action;
            case URL_REWRITE:
                return '/' .$controller . '/' . $action;
        }
    }
 }

시작 파일에서 클래스를 정의하고 기본 클래스를 상속합니다

require_once SQ_PATH.'BaseSqier.php';
class SQ extends BaseSqier{
}

전역적으로 SQ::createUrl() 메서드를 직접 사용하여 URL을 생성할 수 있게 되었습니다.이렇게 하면 __URL__상수를 정의하는 것이 쉬워집니다.

단일 패턴으로 데이터베이스 연결 기반 클래스 정의

class Db {
    protected static $_instance;
    public static function getInstance() {
        if(!(self::$_instance instanceof self)) {
            self::$_instance = new self();
        }
        return self::$_instance;
    }

    private function __construct() {
        $link = new \mysqli(DB_HOST, DB_USER, DB_PWD, DB_NAME) or die("데이터베이스 연결에 실패했습니다. 데이터베이스 구성 정보를 확인하십시오!");
        $link->query('set names utf8');
    }
    public function __clone() {
        return self::getInstance();
    }
}

싱글 모드 사용의 핵심은 다음과 같습니다.

생성자를 민영화하여 사용할 수 없음new는 개체를 만들고 하위 클래스가 개체를 상속하고 생성자를 다시 쓰는 것을 방지합니다.
현재 객체를 정적 변수로 저장합니다.객체를 반환하기 위한 정적 방법을 정의합니다. 예를 들어 객체가 인스턴스화되지 않은 경우 하나를 인스턴스화하고 정적 변수를 저장하고 반환합니다.
구성__클론 매직방법, clone이 새로운 대상을 만들지 않도록 한다.

DB 클래스의 sql 쿼리 함수
DB 쿼리 함수는 매우 복잡하다부분적으로 TP 및 YII와 같은 쿼리 방법에는 고유한 점이 있습니다.여기서 잠시 TP의 MODEL 베이스를 빌리고, 시간이 있을 때 천천히 이것을 보충하겠습니다.

네, TP같은 조회를 소개하겠습니다.각각의 공동조사 방법의 마지막에 return this를 사용하여 처리된 쿼리 대상을 반환하는 것이 이 방법의 구현의 비결입니다

 

반응형

'개발 꿀팁 > PHP' 카테고리의 다른 글

PHP 구현 힙 정렬  (0) 2022.10.10
나만의 PHP 프레임워크 구축하기 (1)  (0) 2022.10.10
나만의 PHP 프레임워크 구축하기 (3)  (1) 2022.09.29
PHP 멀티프로세스 초탐  (1) 2022.09.29
php 상용 판단 함수  (0) 2022.09.28