> php教程 > PHP源码 > 본문

PHP Framework|PHP框架的简单实现|使用namepsace|单列模式运用

PHP中文网
풀어 주다: 2016-05-26 08:20:35
원래의
1275명이 탐색했습니다.

跳至

//单入口文件index.php
<?php
require(&#39;config.php&#39;); //配置文件
require(&#39;system.php&#39;); //实现框架的核心类、方法

$uri = explode(&#39;/&#39;, $_SERVER[&#39;PATH_INFO&#39;]); //取得路由
spl_autoload_register(array(new \App\Web, &#39;autoload&#39;)); //注册自动加载(这里只加载常用的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__.&#39;/View/&#39;.$this->view.&#39;.view.php&#39;);
	}
	
	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__.&#39;/Model/&#39;.ucfirst($model).&#39;.model.php&#39;);
	}
	
	public function cache($cache){
		require(__DIR__.&#39;/Cache/&#39;.ucfirst($cache).&#39;.cache.php&#39;);	
	}
	
	public function module($module){
		require(__DIR__.&#39;/Module/&#39;.ucfirst($module).&#39;.module.php&#39;);	
	}
	
	public function extend($extend){
		require(__DIR__.&#39;/Extend/&#39;.ucfirst($extend).&#39;.extend.php&#39;);	
	}

}
로그인 후 복사

3. [代码]Home.controller.php

load->model(&#39;home&#39;); //加载home模块
		$model = new \App\Model\Home; //实例化
		$model->showHomeModel(); //调用 
            //  \App\Model\Home::showHomeModel();  也可以这样调用,但是会有小小的区别,会在最后说明
		$this->view(&#39;home&#39;)->data(array());
	}
		
	public static function test(){
		echo &#39;this is a test&#39;;
	}
	
}
로그인 후 복사

4. [代码]Home.model.php

namespace App\Model;  //申明App空间下的Model子空间

class Home extends \App\Model{  //继承父层App空间下的Model类
	
	public function showHomeModel(){
		echo $this->db->query(&#39;use $this->db in home model
&#39;);
		echo &#39;this is home model function
&#39;;
	}
	
}
로그인 후 복사

5. [代码]Model模块调用的小小区别说明

showHomeModel();
//在这里申明了要new一个Home.Model的对象实例,那么则会调用Home.Model继承的父类中的db实例,
//那么则就是App空间下的Model类的实例

//那么为会么会有这样的区别呢,是不是与static关键字有关呢,
//暂时还没有想得好明白,如果大家有什么建议,请分享出来哟;
로그인 후 복사

           

       

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿