Home php教程 php手册 200行描述MVC,读完kohana总结的一点笔记

200行描述MVC,读完kohana总结的一点笔记

Jun 06, 2016 pm 07:38 PM
kohana mvc

200行大点,读完kohana总结的一点笔记。 无 ?php header('Content-type: text/html; charset=utf-8'); define('__ROOT__',str_replace('\\','/', __DIR__ )); //set_exception_handler(array("Factory","last_fun")); 设置一个用户定义的异常处理函数 Factory

200行大点,读完kohana总结的一点笔记。
<?php
    header(&#39;Content-type: text/html; charset=utf-8&#39;);
        
    define(&#39;__ROOT__&#39;,str_replace(&#39;\\&#39;,&#39;/&#39;, __DIR__ ));
    //set_exception_handler(array("Factory","last_fun")); 设置一个用户定义的异常处理函数  
    Factory::getIns($_SERVER[&#39;REQUEST_URI&#39;]);
    abstract class ProductInterface
    {
        public $data=array();  //用于接收传过来的内容 
        public static $magic_quotes =NULL;
        public function __construct()
        {
            self::$magic_quotes = (version_compare(PHP_VERSION, &#39;5.4&#39;) < 0 AND get_magic_quotes_gpc());
            // 清洁所有请求变量
            $_GET    = self::sanitize($_GET);
            $_POST   = self::sanitize($_POST);
            $_COOKIE = self::sanitize($_COOKIE);
        }
       
        public static function sanitize($value)
        {
            if (is_array($value) OR is_object($value))  {
                foreach ($value as $key => $val)  { 
                    $value[$key] = self::sanitize($val);
                }
            } elseif (is_string($value)) { 
                if (self::$magic_quotes === TRUE) { 
                    $value = stripslashes($value);
                }  
                if (strpos($value, "\r") !== FALSE) {
                    $value = str_replace(array("\r\n", "\r"), "\n", $value);
                }
            } 
            return $value;
        }
        
        public function __set($k,$v)
        {
            $this->$k = $v;
        }
        
        public function __call($method,$arg)
        {
             echo &#39;错误指定页面&#39;;
             print_r($arg); //错误指定页面
        } 
        
        public static function __callStatic($method,$arg)
        {
             print_r($arg);  //错误指定页面 静态的好像不太可能 先写这儿了
        }
        
        public function assign($key,$value)
        {
            $this->data[$key] = $value;
        }
        
        //引入模板
        public function display($template,$ext = &#39;.html&#39;)
        {
            $template_path = $template.$ext;
            if(file_exists($template_path)){
              foreach ($this->data as $k=>$v){
                $this->__set($k,$v);
              }
               include $template_path;
            }
        }
    }
  
  
  
//控制器
    class IndexAction extends ProductInterface
    {
        public function index()
        { 
            print_r( $_GET); 
           //$body = file_get_contents(&#39;php://input&#39;); 
           //print_r($body);  //结果为  member_id=1234567    enctype="multipart/form-data"
          // print_r($_POST); //结果为  Array ( [member_id] => 1234567 )  
           

		   //$model= new Article(&#39;article&#39;);
           // $arr= $model->select(&#39;SELECT * FROM article limit 2&#39;);
         
		 //print_r($arr);
        }
            
        public function admin($array)
        {
           $model= new Article(&#39;article&#39;); 
           $array=array();
           $array[&#39;rec&#39;]=&#39;admins&#39;;
           $array[&#39;pos&#39;]=&#39;李斯&#39;;
           $array[&#39;content&#39;]=&#39;hellow world&#39;; 
           echo  $model->add($array);
        }
    } 
    
///控制器2
    class AdminAction extends ProductInterface
    {
        public function index($array)
        { 
          echo __method__.&#39;方法&#39;;
        }
    }
  
  
    class Factory
    {
        protected static $ins=null; 
        protected  function __construct(){
           ob_start(); //打开缓冲区  
           static::autoLoad();  
           register_shutdown_function(array(&#39;Factory&#39;,&#39;last&#39;)); //程序执行完后执行 
        }
        
        public static function getIns($url){
            if(self::$ins instanceof self ){
               self::$ins->execute($url); 
           }else{
              self::$ins = new self();
              self::$ins->execute($url); 
           } 
        }
 
        protected function set_router($uri) {
/* 
        $uri=&#39;index/admin&#39;;  
       // $route_regex=&#39;#^(?:(?P[^/.,;?\n]++)(?:/(?P[^/.,;?\n]++)(?:/(?P[^/.,;?\n]++))?)?)?$#uD&#39;;
         //$route_regex=&#39;#^captcha(?:/(?P[^/.,;?\n]++))?$#uD&#39;;  
        $route_regex=&#39;#^(?:(?P<controller>[^/.,;?\n]++)(?:/(?P<action>[^/.,;?\n]++)(?:/(?P<id>[^/.,;?\n]++))?)?)?$#uD&#39;;
        if ( ! preg_match($route_regex, $uri, $matches)) {
            echo &#39;没有匹配上&#39;;
        } else {
            print_r($matches);
        }
*/
              $arr=array();   
              if (strpos($uri,&#39;?&#39;) === false) {
                   $pathinfo=array();
                   
                   if (!empty($_SERVER[&#39;PATH_INFO&#39;])) {
                      $arg=trim($_SERVER[&#39;PATH_INFO&#39;],&#39;/&#39;);
                   } else if ($request_uri = parse_url($_SERVER[&#39;REQUEST_URI&#39;], PHP_URL_PATH)){
                      //有效的URL路径发现,设置它。 
                      $arg= trim($request_uri,&#39;/&#39;); 
                   } 
                  if(stripos($arg,&#39;/&#39;) !== false) {
                     $pathinfo=explode(&#39;/&#39;,$arg);
                  }
                  $arr[&#39;ctrolloer&#39;]= isset($pathinfo[0])? $pathinfo[0] : &#39;index&#39; ;
                  array_shift($pathinfo);
                  $arr[&#39;action&#39;]= isset($pathinfo[0])?$pathinfo[0]:&#39;index&#39; ;
                  array_shift($pathinfo);
                  $num=count($pathinfo);
                  for ($i=0;$i<$num;$i+=2) {
                     $arr[&#39;param&#39;][$pathinfo[$i]]=$pathinfo[$i+1];
                  }
                 
                  return $arr; 
            } else {
                   $ln=parse_url($uri); 
                   parse_str($ln[&#39;query&#39;],$array);
                   $arr[&#39;ctrolloer&#39;]=$array[&#39;m&#39;] ? strtolower($array[&#39;m&#39;]) : &#39;index&#39;;
                   $arr[&#39;action&#39;]=$array[&#39;c&#39;] ? strtolower($array[&#39;c&#39;]) : &#39;index&#39;;
                   unset($array[&#39;m&#39;]); unset($array[&#39;c&#39;]);
                   $arr[&#39;param&#39;]=$array; 
                   return $arr;
            }
        }
 
        protected function execute($url)
        {
            $arr= self::$ins->set_router($url);
            $_GET =  isset($arr[&#39;param&#39;]) ? $arr[&#39;param&#39;] : array();
            $ProductType = ucfirst($arr[&#39;ctrolloer&#39;]).&#39;Action&#39;; 
            if (class_exists($ProductType)) {
              $p=new $ProductType();
              $p->$arr[&#39;action&#39;]($arr);
            } else {
                throw new Exception("Error Processing Request", 1);
            }
        }
        
        public static function last()// echo  &#39;脚本执行完了&#39;. PHP_EOL;
        {  
            $info=ob_get_contents(); //得到缓冲区的内容并且赋值给$info
            $file=fopen($_SERVER[&#39;DOCUMENT_ROOT&#39;].DIRECTORY_SEPARATOR.&#39;indexs.html&#39;,&#39;w&#39;); ///打开文件 指定缓存目录 
            fwrite($file,$info); //写入信息到info.txt  
            fclose($file); //关闭文件info.txt   
            //ob_end_clean();
            ob_end_flush();
            flush(); 
        }
        
         static  public function loadFile($className)
         {
                $dir=array(); 
                $dir[0]=__ROOT__.&#39;/application/&#39;;    //指定多个目录
                $dir[1]=__ROOT__.&#39;/module/&#39;;
                $file_arr=self::find_file($dir,$className);
                foreach($file_arr as $value){
                    if(is_file($value) ){
                        return include_once $value;
                     }else{
                        throw new \Exception(&#39;找不到&#39;.$className.&#39;类&#39;);
                     }
                }
          }

           public static function find_file($paths=array(),$name)
           {
                $name=ucfirst($name).&#39;.php&#39;;
                $found=array();
                foreach ($paths as $dir){
                   if (is_file($dir.$name)){
                     $found[] = $dir.$name;
                   }
                }
               return $found;    
           }
             
            // 注册自动装载机
            static public function autoLoad()
            {
                spl_autoload_register( array(__CLASS__,&#39;loadFile&#39;) );
            }
        
            // 注册自动装载机2   //如有必要注册多个自动加载函数
            static public function autoLoad2()   
            {
                spl_autoload_register( array(__CLASS__,&#39;loadFile2&#39;) );
            }
    }
     
    
    
    abstract class DB{
            public $db=NULL;
            public $table=NULL;
            public $config=array(
                           &#39;dsn&#39;=>&#39;mysql:dbname=test;host=127.0.0.1&#39;,
                           &#39;user&#39;=>&#39;root&#39;,
                           &#39;password&#39;=>&#39;root&#39;,
						   &#39;charset&#39;=>&#39;utf8&#39;,
						   &#39;persistent&#39;=>false  //持久性链接
                           );
          
			public  $options = array(
				PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES ",
			);
			
			public function __construct($table){
				$this->table=$table;
				$this->options[PDO::MYSQL_ATTR_INIT_COMMAND] .= $this->config [&#39;charset&#39;];
				if($this->config [&#39;persistent&#39;]){
					$this->options[PDO::ATTR_PERSISTENT] = true;
				} 
				try {
				   // 长连接,如有需要将array(PDO::ATTR_PERSISTENT=>true) 作为第四个参数
				  $this->db=$pdo = new \PDO ( $this->config [&#39;dsn&#39;],$this->config [&#39;user&#39;],$this->config [&#39;password&#39;],$this->options);
				  
				 //$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_SILENT); //不显示错误
				 
				  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);//显示警告错误,并继续执行
				  
				  $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//产生致命错误,PDOException
				  //$this->db->exec(&#39;set names utf8&#39;);
				 } catch ( \Exception $e ) {
					throw new \Exception ( $e->getMessage () );
				 }
			}
	 
            public function query($sql){
               return  $re=$this->db->query($sql);
            }
       
            public function select($sql) /*查询*/  
            {
                $re=$this->query($sql);
                return $re->fetchAll();
            }  

            public function add($arr=array()){  /*添加*/
                $sql = &#39;insert into &#39; . $this->table . &#39; (&#39; . implode(&#39;,&#39;,array_keys($arr)) . &#39;)&#39;;
                $sql .= " values (&#39;";
                $sql .= implode("&#39;,&#39;",array_values($arr));
                $sql .= "&#39;)"; 
                $stmt = $this->db->prepare($sql);
                $stmt->execute($arr); 
               echo $this->db->lastinsertid();   
           } 
           
           public function update($arr,$where = &#39; where 1 limit 1&#39;){ /*修改*/
            //$sql = "UPDATE `user` SET `password`=:password WHERE `user_id`=:userId";   
            $sql = &#39;update &#39; . $this->table .&#39; set &#39;;
            foreach($arr as $k=>$v) {
                $sql .= $k . "=&#39;" . $v ."&#39;,";
            }
             $sql = rtrim($sql,&#39;,&#39;);
             $sql .= $where; 
               $stmt = $this->db->prepare($sql);
             $stmt->execute($arr);    
               return $stmt->rowCount();        
           }
           
           public function delete($sql){ /*删除*/ 
             $stmt = $this->db->prepare($sql);
             $stmt->execute();
             return $stmt->rowCount();
           } 
    }
    ////可以每一张表一个类 统一继承DB类。。。。。
    class Article extends DB{ 
    }
?>  
<script>
    var x=1,y=z=0;
    function add(n){
      n=n+1;
    }
    y=add(x);
    function add(n){
      n=n+3;
    }
z=add(x); 
</script>
Copy after login
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PHP MVC Architecture: Building Web Applications for the Future PHP MVC Architecture: Building Web Applications for the Future Mar 03, 2024 am 09:01 AM

Introduction In today's rapidly evolving digital world, it is crucial to build robust, flexible and maintainable WEB applications. The PHPmvc architecture provides an ideal solution to achieve this goal. MVC (Model-View-Controller) is a widely used design pattern that separates various aspects of an application into independent components. The foundation of MVC architecture The core principle of MVC architecture is separation of concerns: Model: encapsulates the data and business logic of the application. View: Responsible for presenting data and handling user interaction. Controller: Coordinates the interaction between models and views, manages user requests and business logic. PHPMVC Architecture The phpMVC architecture follows the traditional MVC pattern, but also introduces language-specific features. The following is PHPMVC

An advanced guide to PHP MVC architecture: unlocking advanced features An advanced guide to PHP MVC architecture: unlocking advanced features Mar 03, 2024 am 09:23 AM

The MVC architecture (Model-View-Controller) is one of the most popular patterns in PHP development because it provides a clear structure for organizing code and simplifying the development of WEB applications. While basic MVC principles are sufficient for most web applications, it has some limitations for applications that need to handle complex data or implement advanced functionality. Separating the model layer Separating the model layer is a common technique in advanced MVC architecture. It involves breaking down a model class into smaller subclasses, each focusing on a specific functionality. For example, for an e-commerce application, you might break down the main model class into an order model, a product model, and a customer model. This separation helps improve code maintainability and reusability. Use dependency injection

How to implement the MVC pattern using PHP How to implement the MVC pattern using PHP Jun 07, 2023 pm 03:40 PM

The MVC (Model-View-Controller) pattern is a commonly used software design pattern that can help developers better organize and manage code. The MVC pattern divides the application into three parts: Model, View and Controller, each part has its own role and responsibilities. In this article, we will discuss how to implement the MVC pattern using PHP. Model A model represents an application's data and data processing. usually,

Uncovering the success of the SpringMVC framework: why it is so popular Uncovering the success of the SpringMVC framework: why it is so popular Jan 24, 2024 am 08:39 AM

SpringMVC framework decrypted: Why is it so popular, specific code examples are needed Introduction: In today's software development field, the SpringMVC framework has become a very popular choice among developers. It is a Web framework based on the MVC architecture pattern, providing a flexible, lightweight, and efficient development method. This article will delve into the charm of the SpringMVC framework and demonstrate its power through specific code examples. 1. Advantages of SpringMVC framework Flexible configuration method Spr

How to use MVC architecture to design projects in PHP How to use MVC architecture to design projects in PHP Jun 27, 2023 pm 12:18 PM

In Web development, MVC (Model-View-Controller) is a commonly used architectural pattern for processing and managing an application's data, user interface, and control logic. As a popular web development language, PHP can also use the MVC architecture to design and build web applications. This article will introduce how to use MVC architecture to design projects in PHP, and explain its advantages and precautions. What is MVCMVC is a software architecture pattern commonly used in web applications. MV

Developing MVC with PHP8 framework: Important concepts and techniques that beginners need to know Developing MVC with PHP8 framework: Important concepts and techniques that beginners need to know Sep 11, 2023 am 09:43 AM

Developing MVC with PHP8 framework: Important concepts and techniques that beginners need to know Introduction: With the rapid development of the Internet, Web development plays an important role in today's software development industry. PHP is widely used for web development, and there are many mature frameworks that help developers build applications more efficiently. Among them, the MVC (Model-View-Controller) architecture is one of the most common and widely used patterns. This article will introduce how beginners can use the PHP8 framework to develop MVC applications.

Developing MVC with PHP8 Framework: A Step-by-Step Guide Developing MVC with PHP8 Framework: A Step-by-Step Guide Sep 11, 2023 am 10:05 AM

Developing MVC with PHP8 Framework: A Step-by-Step Guide Introduction: MVC (Model-View-Controller) is a commonly used software architecture pattern that is used to separate the logic, data and user interface of an application. It provides a structure that separates the application into three distinct components for better management and maintenance of the code. In this article, we will explore how to use the PHP8 framework to develop an application that conforms to the MVC pattern. Step One: Understand the MVC Pattern Before starting to develop an MVC application, I

From routing to views—an in-depth exploration of Beego's MVC architecture From routing to views—an in-depth exploration of Beego's MVC architecture Jun 23, 2023 am 10:53 AM

Beego is a web application framework based on Go language, which has the advantages of high performance, simplicity and ease of use, and high scalability. Among them, the MVC architecture is one of the core design concepts of the Beego framework. It can help developers better manage and organize code, improve development efficiency and code quality. This article will delve into Beego's MVC architecture so that developers can better understand and use the Beego framework. 1. Introduction to MVC architecture MVC, or Model-View-Controller, is a common

See all articles