• 技术文章 >php教程 >PHP源码

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

    PHP中文网PHP中文网2016-05-26 08:20:35原创639
    跳至

    //单入口文件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核实处理。
    上一篇:查询whois就这么简单 下一篇:Memcache内存分配机制 - ftd - 博客频道
    千万级数据并发解决方案

    相关文章推荐

    • Yaf框架入门只hello yaf• PHP session实现跨子域的几种办法• PHP常用用的六个处理正则表达式函数• php 完整图片按比例生成缩略图代码• php 日期与日间之差函数
    1/1

    PHP中文网