> 백엔드 개발 > PHP7 > 본문

php7은 어떻게 다른 프레임워크로부터 학습하고 자체 프레임워크를 작성합니까?

醉折花枝作酒筹
풀어 주다: 2023-02-18 07:38:01
앞으로
2006명이 탐색했습니다.

프레임워크의 핵심 링크는 초기 요청 라우팅 분석부터 컨트롤러 배포, 모델의 데이터 상호 작용, 응답까지입니다. 다른 프레임워크를 사용하여 구현하는 것은 매우 번거롭고 너무 많은 콘텐츠를 통합하므로 그 중 많은 내용이 필요하지 않으므로 다른 프레임워크를 기반으로 간단하고 실용적인 프레임워크를 작성했습니다.

php7은 어떻게 다른 프레임워크로부터 학습하고 자체 프레임워크를 작성합니까?

라우팅부터 시작해 보겠습니다.

1) 라우팅

라우팅 프로토콜의 규칙은 정규식 일치를 사용하여 서로 다른 링크를 서로 다른 컨트롤러에 배포하고 익명 함수 호출도 지원합니다

// 第一种,使用匿名函数
App::router()->get('/', function () {
    echo "Beauty Framework.";
});
로그인 후 복사
// 第二种,使用url分发到控制器
App::router()->post('/user/info/[0-9]+(/[0-9]+)?', 'App\Controllers\UserController@getUserInfo');
로그인 후 복사

구현된 핵심 코드: ( 아주 간단하죠?)

if (is_string($lostrcallable) && preg_match('!^([\a-zA-Z0-9]+)\@([a-zA-Z0-9]+)$!', $lostrcallable, $matches)) {
            $class  = $matches[1];
            $method = $matches[2];

            $callable = function () use ($class, $method) {
                static $obj = null;
                if ($obj === null) {

                    $obj = new $class;
                }

                return call_user_func_array(array($obj, $method), func_get_args());
            };
        }
로그인 후 복사

2) 컨트롤러가 없다면

어디에서나 요청을 처리할 수 있습니다. 하지만 MVC에 따르면 컨트롤러에 작성하는 것이 좋습니다. 여러분.

3) 모델 레이어

Dao 클래스는 현재 많은 사람들이 MySQL을 사용하고 있기 때문에 데이터베이스 쿼리 작업을 위해 여기에 직접 통합되어 있으며 데이터베이스 기본 작업은 주입 및 기타 문제가 많고 이를 수행할 수 있는 직접적인 Qquery 방법이 없습니다.

4) DAO 레이어

읽기와 쓰기를 분리해야 하는 경우가 많지만 이를 구현하기 위해 MySQL Proxy를 사용하는 것은 너무 번거롭기 때문에 데이터베이스 쿼리를 지원하여 마스터 데이터베이스와 슬레이브 데이터베이스를 각각 사용하도록 구현되었습니다. 다른 SQL에.

어떻게 하나요?

사용하지 않는 쿼리 작업에 따라 직접 구분됩니다. 선택 쿼리 작업은 읽기 라이브러리에 직접 할당되고, 삽입, 업데이트, 삭제는 쓰기 라이브러리에 직접 할당됩니다. onMasterConnection/onSlaveConnection을 사용하여 직접 지정할 수도 있습니다.

Select가 어떻게 수행되는지 살펴보세요. 이 부분은 구현 로직입니다.

    /**
     * 获取查询内容,以数组形式返回,数据内为array。
     *
     * @access public
     * @param integer|array $limit Array to define SQL limit in format Array ($count, $offset)
     *                             or only $count
     *
     * @return mixed Array of Clients
     */
    protected function get($limit = null)
    {
        $this->dbClient->setQueryChannel($this->channel);

        $results = $this->dbClient->arrayBuilder()->get($this->dbTable, $limit, $this->fields);
        $this->_reset();

        if ($this->dbClient->count == 0) {
            return [];
        }

        return $results;
    }
로그인 후 복사

5) 구성 클래스

개발 환경과 프로덕션 환경에서 서로 다른 구성 환경이 사용됩니다. 프레임워크에서 .env 환경을 생성하여 전환할 수 있습니다. 개발과 프로덕션은 config에서 일상적으로 설정할 수 있습니다. 어떤 환경을 사용하든 .env

; This is a environment configuration file
environment=development
로그인 후 복사

에 설정됩니다. 물론 config 파일에서 직접 설정할 수 있는 일부 공개 구성 정보도 있으므로 어떤 환경에서도 사용할 수 있습니다. 환경.

// 支持使用.连接访问配置项,访问的是config/app.php中的config key
\Beauty\Core\App::config()->get("app.config");
로그인 후 복사

6) 요청 응답

View는 필요 없고 json 데이터만 반환하면 되므로 헤더에 text/json을 직접 작성합니다. = =

기타 구현

  • memcache 및 redis는 일관된 해싱을 사용하여 다양한 인스턴스에 액세스합니다.

  • 검증기 검증 수업

구체적인 코드는 github https://github.com/tigerk/Beauty

여기에 있습니다. → →php 비디오 튜토리얼

위 내용은 php7은 어떻게 다른 프레임워크로부터 학습하고 자체 프레임워크를 작성합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!