Heim 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>
Nach dem Login kopieren
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP MVC-Architektur: Webanwendungen für die Zukunft erstellen PHP MVC-Architektur: Webanwendungen für die Zukunft erstellen Mar 03, 2024 am 09:01 AM

PHP MVC-Architektur: Webanwendungen für die Zukunft erstellen

Eine erweiterte Anleitung zur PHP-MVC-Architektur: Erweiterte Funktionen freischalten Eine erweiterte Anleitung zur PHP-MVC-Architektur: Erweiterte Funktionen freischalten Mar 03, 2024 am 09:23 AM

Eine erweiterte Anleitung zur PHP-MVC-Architektur: Erweiterte Funktionen freischalten

So implementieren Sie das MVC-Muster mit PHP So implementieren Sie das MVC-Muster mit PHP Jun 07, 2023 pm 03:40 PM

So implementieren Sie das MVC-Muster mit PHP

Entdecken Sie den Erfolg des SpringMVC-Frameworks: Warum es so beliebt ist Entdecken Sie den Erfolg des SpringMVC-Frameworks: Warum es so beliebt ist Jan 24, 2024 am 08:39 AM

Entdecken Sie den Erfolg des SpringMVC-Frameworks: Warum es so beliebt ist

So verwenden Sie die MVC-Architektur zum Entwerfen von Projekten in PHP So verwenden Sie die MVC-Architektur zum Entwerfen von Projekten in PHP Jun 27, 2023 pm 12:18 PM

So verwenden Sie die MVC-Architektur zum Entwerfen von Projekten in PHP

Detaillierte Erklärung von Spring MVC: Eingehende Analyse dieses leistungsstarken Frameworks Detaillierte Erklärung von Spring MVC: Eingehende Analyse dieses leistungsstarken Frameworks Dec 29, 2023 am 08:09 AM

Detaillierte Erklärung von Spring MVC: Eingehende Analyse dieses leistungsstarken Frameworks

MVC mit PHP8 Framework entwickeln: Eine Schritt-für-Schritt-Anleitung MVC mit PHP8 Framework entwickeln: Eine Schritt-für-Schritt-Anleitung Sep 11, 2023 am 10:05 AM

MVC mit PHP8 Framework entwickeln: Eine Schritt-für-Schritt-Anleitung

Vom Routing bis zu Ansichten – eine ausführliche Erkundung der MVC-Architektur von Beego Vom Routing bis zu Ansichten – eine ausführliche Erkundung der MVC-Architektur von Beego Jun 23, 2023 am 10:53 AM

Vom Routing bis zu Ansichten – eine ausführliche Erkundung der MVC-Architektur von Beego

See all articles