打造属于自己的MVC框架
本文为转载。 最近正打算培训一下新人做PHP开发,突然想起了这篇关于php的MVC入门教程。当初我入门的时候也是参照它来看。觉得它还是比较通俗易懂,于是就转过来,给需要的人也看看 ————————————————分割线————————————————
本文为转载。
最近正打算培训一下新人做PHP开发,突然想起了这篇关于php的MVC入门教程。当初我入门的时候也是参照它来看。觉得它还是比较通俗易懂,于是就转过来,给需要的人也看看
————————————————分割线————————————————
本篇先介绍一下php的MVC实现原理,我们框架的MVC部分也是基于此原理实现的,但是今天的代码并不是框架内的代码,仅仅为说明原理。
一、文件结构
?? ?建立3个文件夹
?? ?controller文件夹存放控制器文件
?? ?view文件夹存放视图文件
?? ?model文件夹存放数据文件
?? ?建立1个index.php 作为唯一入口
二、控制器
?? ?我们在controller文件夹下建立一个democontroller.php文件,文件内容如下
<?php class DemoController { function index() { echo('hello world'); } } /* End of file democontroller.php */
?? ?这个文件里面我们只是建立了一个名为DemoController的对象并包含一个index的方法,该方法输出hello world。下面在index.php中执行DemoController中index方法。
?? ?index.php的代码如下
<?php require('controller/democontroller.php'); $controller=new DemoController(); $controller--->index(); /* End of file index.php */
?? ?运行index.php,ok如愿我们看到了我们久违的hello world。这两个文件非常简单,但也揭示了一点点mvc的本质,通过唯一入口运行我们要运行的控制器。当然controller部分应该是由uri来决 定的,那么我们来改写一下index.php使他能通过uri来决定运行那个controller。
?? ?index.php改写代码如下:
<?php $c_str=$_GET['c']; //获取要运行的controller $c_name=$c_str.'Controller'; //按照约定url中获取的controller名字不包含Controller,此处补齐。 $c_path='controller/'.$c_name.'.php'; //按照约定controller文件要建立在controller文件夹下,类名要与文件名相同,且文件名要全部小写。 $method=$_GET['a']; //获取要运行的action require($c_path); //加载controller文件 $controller=new $c_name; //实例化controller文件 $controller--->$method(); //运行该实例下的action /* End of file index.php */
?? ?在浏览器中输入http://localhost/index.php?c=demo&a=index,得到了我们的hello world。当然如果我们有其他的controller并且要运行它,只要修改url参数中的c和a的值就可以了。
?? ?这里有几个问题要说明一下。
?? ?一、php是动态语言,我们直接可以通过字符串new出我们想要的对象和运行我们想要的方法,即上面的new $c_name,我们可以理解成new ‘DemoController’,因为$c_name本身的值就是’DemoController’,当然直接new ‘DemoController’这么写是不行的,其中的’DemoController’字符串必须通过一个变量来中转一下。方法也是一样的。
?? ?二、我们在url中c的值是demo,也就是说$c_name 的值应该是demoController呀,php不是区分大小写吗,这样也能运行吗?php区分大小写这句话不完整,在php中只有变量(前面带$的) 和常量(define定义的)是区分大小写的,而类名方,法名甚至一些关键字都是不区分大小写的。而true,false,null等只能全部大写或全部 小写。当然我们最好在实际编码过程中区分大小写。
三、视图
?? ?我们在前面的controller中只是输出了一个“hello world”,并没有达到mvc的效果,下面我将在此基础上增加视图功能,相信到这里大家基本已经能想到如何添加视图功能了。对,就是通过万恶的require或者include来实现。
?? ?首先我们在view文件夹下建立一个index.php,随便写点什么(呵呵,我写的还是hello world)。之后我们改写一下我们之前的DemoController。代码如下:
<?php class DemoController { function index() { require('view/index.php'); } } /* End of file democontroller.php */
?? ?再在浏览器中运行一下,看看是不是已经输出了我们想要的内容了。
?? ?接着我们通过controller向view传递一些数据看看,代码如下:
<?php class DemoController { function index() { $data['title']='First Title'; $data['list']=array('A','B','C','D'); require('view/index.php'); } } /* End of file democontroller.php */
?? ?view文件夹下index.php文件代码如下:
demo <?php echo $data['title'];?> <?php foreach ($data['list'] as $item) { echo $item.''; } ?>
原文出处:http://www.cnblogs.com/kaixing/archive/2012/03/05/2380615.html
原文地址:打造属于自己的MVC框架, 感谢原作者分享。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









Java 프레임워크에 대한 상용 지원의 비용/성능 평가에는 다음 단계가 포함됩니다. 필요한 보증 수준과 SLA(서비스 수준 계약) 보장을 결정합니다. 연구지원팀의 경험과 전문성. 업그레이드, 문제 해결, 성능 최적화와 같은 추가 서비스를 고려하십시오. 위험 완화 및 효율성 향상을 기준으로 비즈니스 지원 비용을 평가합니다.

경량 PHP 프레임워크는 작은 크기와 낮은 리소스 소비를 통해 애플리케이션 성능을 향상시킵니다. 그 특징은 다음과 같습니다: 작은 크기, 빠른 시작, 낮은 메모리 사용량, 향상된 응답 속도 및 처리량, 리소스 소비 감소 실제 사례: SlimFramework는 500KB에 불과한 REST API를 생성하며 높은 응답성과 높은 처리량을 제공합니다.

PHP 프레임워크의 학습 곡선은 언어 숙련도, 프레임워크 복잡성, 문서 품질 및 커뮤니티 지원에 따라 달라집니다. PHP 프레임워크의 학습 곡선은 Python 프레임워크에 비해 높고 Ruby 프레임워크에 비해 낮습니다. Java 프레임워크에 비해 PHP 프레임워크는 학습 곡선이 적당하지만 시작하는 데 걸리는 시간이 더 짧습니다.

Golang 프레임워크에서는 명확하고 포괄적인 문서를 작성하는 것이 중요합니다. 모범 사례에는 Google의 Go 코딩 스타일 가이드와 같은 확립된 문서 스타일을 따르는 것이 포함됩니다. 제목, 부제, 목록 등 명확한 조직 구조를 사용하고 탐색 기능을 제공하세요. 시작 안내서, API 참조 및 개념을 포함하여 포괄적이고 정확한 정보를 제공합니다. 코드 예제를 사용하여 개념과 사용법을 설명합니다. 문서를 계속 업데이트하고, 변경 사항을 추적하고, 새로운 기능을 문서화하세요. GitHub 문제 및 포럼과 같은 지원 및 커뮤니티 리소스를 제공합니다. API 문서와 같은 실용적인 예제를 만듭니다.

벤치마크에 따르면 소규모 고성능 애플리케이션의 경우 Quarkus(빠른 시작, 낮은 메모리) 또는 Micronaut(TechEmpower 우수)가 이상적인 선택입니다. SpringBoot는 대규모 풀 스택 애플리케이션에 적합하지만 시작 시간과 메모리 사용량이 약간 느립니다.

애플리케이션 시나리오를 기반으로 최고의 Go 프레임워크를 선택하세요. 애플리케이션 유형, 언어 기능, 성능 요구 사항 및 생태계를 고려하세요. Common Go 프레임워크: Gin(웹 애플리케이션), Echo(웹 서비스), Fiber(높은 처리량), gorm(ORM), fasthttp(속도). 실제 사례: REST API(Fiber) 구축 및 데이터베이스(gorm)와 상호 작용. 프레임워크를 선택하세요. 주요 성능을 위해서는 fasthttp를 선택하고, 유연한 웹 애플리케이션을 위해서는 Gin/Echo를, 데이터베이스 상호작용을 위해서는 gorm을 선택하세요.

Go 프레임워크 개발에서 일반적인 과제와 해결 방법은 다음과 같습니다. 오류 처리: 관리에는 오류 패키지를 사용하고 중앙에서 오류를 처리하려면 미들웨어를 사용합니다. 인증 및 권한 부여: 타사 라이브러리를 통합하고 사용자 정의 미들웨어를 생성하여 자격 증명을 확인합니다. 동시 처리: 고루틴, 뮤텍스 및 채널을 사용하여 리소스 액세스를 제어합니다. 단위 테스트: 격리를 위해 getest 패키지, 모의 및 스텁을 사용하고, 충분성을 보장하기 위한 코드 적용 도구를 사용합니다. 배포 및 모니터링: Docker 컨테이너를 사용하여 배포를 패키징하고, 데이터 백업을 설정하고, 로깅 및 모니터링 도구를 사용하여 성능과 오류를 추적합니다.

Go 프레임워크를 선택할 때 핵심 성과 지표(KPI)에는 응답 시간, 처리량, 동시성 및 리소스 사용량이 포함됩니다. 프레임워크의 KPI를 벤치마킹하고 비교함으로써 개발자는 예상 로드, 성능이 중요한 섹션 및 리소스 제약 조건을 고려하여 애플리케이션 요구 사항에 따라 정보에 입각한 선택을 내릴 수 있습니다.
