php-mvc新闻项目体会-1
这几天一直都在钻研pengcheng大神的自定义mvc,以及他的新闻实例,从中体会mvc的power。再次对pengcheng大神表示崇高的敬意~框架虽然满大街了,但不妨碍我们通过构思自己的框架来加深对框架的理解,知其然更要知其所以然。先对pengcheng大神方向上香....鞠躬.
好吧,不闹了~进入正题。
上3节写了简单的MVC结构和Smarty的引入。MVC中V我们可以借助Smarty完成它的职能,另外M里面我们只是简单地返回一段数据,C里面我们也只是实现自动实例化各类而已。M和C绝对不会就如此简单。现在让我们从一个【新闻实例】来领教controller和model的高招。
本来,各个职能的文件需要有规范地分类。为了方便,就避免折腾文件路径的问题了。文件布局如下:
其中,data文件包括Smarty定义的各个模板文件,smarty文件夹就是存放下载的Smarty.看起来有些凌乱,高手勿喷~
config.php包含各参数的配置信息(VIEW引擎和DB引擎),打包成数组
封装VIEW引擎
首先,为了实现视图职能,定义一个view引擎:VIEW.php
在这个VIEW类里面定义了三个方法:
方法init,顾名思义,是为了完成对Smarty的初始化:包括引入Smarty.class.php文件,通过传入的$viewtype生成smarty类,通过传入的$config参数(数组)对Smarty的各属性赋值。
方法assign,这里再次定义assign方法,是为了把它包装成共有的静态方法,方便外部调用(不用再实例化),并且assign方法通过改造之后,可以把数据打包成数组的形式当做参数传入新包装的assign注册数组里面的每一个值。
方法display,这里只是为了把它包装成共有的静态方法。
最后,我们来重新审视一下这个VIEW类的方法,它们都是public static的,即是说,以后我们在外部调用的时候不再需要导入smarty.class.php和实例化,直接VIEW::assign()注册,再VIEW::display()就可以简单地实现mvc中的view职能了~
封装数据库引擎
由于我们的项目需要对数据作保留,需要用到数据库的增删改查。我们又想,可不可以也封装一个数据库引擎,以后需要进行数据库操作的时候也直接调用静态方法就OK?
我们在一样在类里定义一个静态属性,用来存储实例化之后的对象。定义各个静态方法,方便外部直接调用。
我觉得这种方法就像java的抽象类:我们可以在里面定义属性,定义抽象方法,不需要具体地实现,只需要制定功能而已。但又跟抽象类有些小小的不同:外部调用不用new,没有继承,方法的具体实现靠一个Init方法new一个类(我称之为实现类)。通过自己的静态属性来存储‘实现类’的方法,通过自己的方法来调用类来实现‘实现类’的具体的方法。
打个形象地比喻: 封装的引擎就像是卖二手车的~定义一个静态变量接受‘实现类’的各种旧车(方法),然后把旧车(方法)换个崭新的壳子(包装成共有的静态方法public static)出售。
上面的VIEW引擎有Smarty作为‘实现类’,可是数据库(DB)引擎没有,那么我们就来定义它的‘实现类’来具现方法。是为mysql.class.php。至于mysql类的封装仁者见仁智者见智,怎么方便就怎么封装呗
注:1>引擎里面不能有输出语句,MVC思想就是分工分层,所以取得数据之后不能echo,只能return。
2>DB引擎并不代表Model,只是Model的一部分,可以理解为Model的工具
到这里,我们MVC中,view层搞定,model层暂告一段落。
前几节中已经了解到controller职能是实例化view和model并且调用他们的方法。但是,我们不在controller里直接实例化,而是通过定义函数function.php来实例化。function.php已经是老熟人了,见图:
看到这里或许有朋友会疑问:你这不是在逗我么?说好的MVC说好的V方法呢?
放心,我不认识猴子,它也请不动哥。V方法已经在Smarty中实现了,初始化Smarty就是初始化View。VIEW引擎取代了V的工作。
封装启动引擎
我一再强调此项目乃是pengcheng大神的神来之笔,启动引擎也是以其名字来命名PC.php。负责导入各文件,完成各引擎的实例化,以及对url传递参数的初始化。
这里封装一个public方法run统一执行各个private方法完成初始化,提高安全性
接下来,我们需要封装一个统一的入口文件,在里面直接调用run方法
测试一下:
不好意思,忘了定义controller文件了,也是逗了,我承认我是猴子派来的~哈哈
好,这里更加凸显了controller的职能,流程是这样的,从统一的入口文件admin.php进来,调用run初始化了各个引擎方法,接着通过C方法,进入控制层,调用url传参controller=xxx&method=xxx相应的M和V完成业务。如此,定义一个adminController.class.php文件
里面只写一个test方法,测试调用test方法:
测试成功,说明入口文件,控制层和视图层都是没问题的。可以接着往下开发了

핫 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)

뜨거운 주제











Laravel은 직관적 인 플래시 방법을 사용하여 임시 세션 데이터 처리를 단순화합니다. 응용 프로그램에 간단한 메시지, 경고 또는 알림을 표시하는 데 적합합니다. 데이터는 기본적으로 후속 요청에만 지속됩니다. $ 요청-

PHP 클라이언트 URL (CURL) 확장자는 개발자를위한 강력한 도구이며 원격 서버 및 REST API와의 원활한 상호 작용을 가능하게합니다. PHP CURL은 존경받는 다중 프로모토콜 파일 전송 라이브러리 인 Libcurl을 활용하여 효율적인 execu를 용이하게합니다.

Alipay PHP ...

Laravel은 간결한 HTTP 응답 시뮬레이션 구문을 제공하여 HTTP 상호 작용 테스트를 단순화합니다. 이 접근법은 테스트 시뮬레이션을보다 직관적으로 만들면서 코드 중복성을 크게 줄입니다. 기본 구현은 다양한 응답 유형 단축키를 제공합니다. Illuminate \ support \ Facades \ http를 사용하십시오. http :: 가짜 ([ 'google.com'=> 'Hello World', 'github.com'=> [ 'foo'=> 'bar'], 'forge.laravel.com'=>

고객의 가장 긴급한 문제에 실시간 인스턴트 솔루션을 제공하고 싶습니까? 라이브 채팅을 통해 고객과 실시간 대화를 나누고 문제를 즉시 해결할 수 있습니다. 그것은 당신이 당신의 관습에 더 빠른 서비스를 제공 할 수 있도록합니다.

기사는 PHP 5.3에 도입 된 PHP의 LSB (Late STATIC BING)에 대해 논의하여 정적 방법의 런타임 해상도가보다 유연한 상속을 요구할 수있게한다. LSB의 실제 응용 프로그램 및 잠재적 성능

이 기사에서는 프레임 워크에 사용자 정의 기능 추가, 아키텍처 이해, 확장 지점 식별 및 통합 및 디버깅을위한 모범 사례에 중점을 둡니다.

기사는 입력 유효성 검사, 인증 및 정기 업데이트를 포함한 취약점을 방지하기 위해 프레임 워크의 필수 보안 기능을 논의합니다.
