PHP Framework|PHP框架的简单实现|使用namepsace|单列模式运用
//单入口文件index.php <?php require('config.php'); //配置文件 require('system.php'); //实现框架的核心类、方法 $uri = explode('/', $_SERVER['PATH_INFO']); //取得路由 spl_autoload_register(array(new \App\Web, 'autoload')); //注册自动加载(这里只加载常用的Library库) \App\Web::lanuch($uri[1], $uri[2], array_slice($uri, 3)); //框架开始
로그인 후 복사
2. [代码]框架实现核心代码
db = new \App\Lib\db; //实例化mysql,因为考虑到web中,基本都会有CURD的操作,所以在框架开始的时候就把mysql的库实例化出来,后面就直接用就是了,当然要在后面按需加载也是可以的哟 $this->load = new \App\Load; //实例一个工具类吧,后面在Controller里需要加载Model,Module等等时会用到 } public function view($view){ //在Controller里使用的渲染视图时用到的 $this->view = ucfirst($view); return self::$instance; } public function data($data){ // 与上文中有view方法配合使用,传递array变量到视图 extract($data); require(__DIR__.'/View/'.$this->view.'.view.php'); } public static function instance(){ //取得Controller的实例instance return self::$instance; } } class Model{ public function __get($key){ return \App\Controller::instance()->$key; } //__get魔术方法,比如在Model里面调用db的时候,就会通过这里取得在Controller已经实例好的那个mysql对象哟,不用再重复实例化了; } //===========================================================================================================// class Load{ //相关加载的方法,这里没有做自动加载处理,如果有好的建议请讨论交流哟 public function model($model){ require(__DIR__.'/Model/'.ucfirst($model).'.model.php'); } public function cache($cache){ require(__DIR__.'/Cache/'.ucfirst($cache).'.cache.php'); } public function module($module){ require(__DIR__.'/Module/'.ucfirst($module).'.module.php'); } public function extend($extend){ require(__DIR__.'/Extend/'.ucfirst($extend).'.extend.php'); } }
로그인 후 복사
3. [代码]Home.controller.php
load->model('home'); //加载home模块 $model = new \App\Model\Home; //实例化 $model->showHomeModel(); //调用 // \App\Model\Home::showHomeModel(); 也可以这样调用,但是会有小小的区别,会在最后说明 $this->view('home')->data(array()); } public static function test(){ echo 'this is a test'; } }
로그인 후 복사
4. [代码]Home.model.php
namespace App\Model; //申明App空间下的Model子空间 class Home extends \App\Model{ //继承父层App空间下的Model类 public function showHomeModel(){ echo $this->db->query('use $this->db in home model '); echo 'this is home model function '; } }
로그인 후 복사
5. [代码]Model模块调用的小小区别说明
showHomeModel(); //在这里申明了要new一个Home.Model的对象实例,那么则会调用Home.Model继承的父类中的db实例, //那么则就是App空间下的Model类的实例 //那么为会么会有这样的区别呢,是不是与static关键字有关呢, //暂时还没有想得好明白,如果大家有什么建议,请分享出来哟;
로그인 후 복사
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사
어 ass 신 크리드 그림자 : 조개 수수께끼 솔루션
3 몇 주 전
By DDD
Windows 11 KB5054979의 새로운 기능 및 업데이트 문제를 해결하는 방법
2 몇 주 전
By DDD
Atomfall에서 크레인 제어 키 카드를 찾을 수 있습니다
3 몇 주 전
By DDD
어 ass 신 크리드 섀도우 - 대장장이를 찾고 무기 및 갑옷 커스터마 화 잠금 해제 방법
1 몇 달 전
By DDD
<s> : 데드 레일 - 모든 도전을 완료하는 방법
3 몇 주 전
By DDD

뜨거운 도구

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

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

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

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

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

뜨거운 주제
Gmail 이메일의 로그인 입구는 어디에 있나요?
7621
15


Cakephp 튜토리얼
1389
52


Steam의 계정 이름 형식은 무엇입니까?
89
11


Win11 활성화 키 영구
70
19


NYT 연결 힌트와 답변
31
136

