Maison 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>
Copier après la connexion
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Architecture PHP MVC : créer des applications Web pour le futur Architecture PHP MVC : créer des applications Web pour le futur Mar 03, 2024 am 09:01 AM

Introduction Dans le monde numérique en évolution rapide d'aujourd'hui, il est crucial de créer des applications WEB robustes, flexibles et maintenables. L'architecture PHPmvc fournit une solution idéale pour atteindre cet objectif. MVC (Model-View-Controller) est un modèle de conception largement utilisé qui sépare les différents aspects d'une application en composants indépendants. Les fondements de l'architecture MVC Le principe fondamental de l'architecture MVC est la séparation des préoccupations : Modèle : encapsule les données et la logique métier de l'application. Vue : responsable de la présentation des données et de la gestion des interactions des utilisateurs. Contrôleur : coordonne l'interaction entre les modèles et les vues, gère les demandes des utilisateurs et la logique métier. Architecture PHPMVC L'architecture phpMVC suit le modèle MVC traditionnel mais introduit également des fonctionnalités spécifiques au langage. Ce qui suit est PHPMVC

Un guide avancé de l'architecture PHP MVC : débloquer des fonctionnalités avancées Un guide avancé de l'architecture PHP MVC : débloquer des fonctionnalités avancées Mar 03, 2024 am 09:23 AM

L'architecture MVC (Model-View-Controller) est l'un des modèles les plus populaires dans le développement PHP car elle fournit une structure claire pour organiser le code et simplifier le développement d'applications WEB. Bien que les principes de base de MVC soient suffisants pour la plupart des applications Web, ils présentent certaines limites pour les applications qui doivent gérer des données complexes ou implémenter des fonctionnalités avancées. Séparation de la couche modèle La séparation de la couche modèle est une technique courante dans l'architecture MVC avancée. Cela implique de diviser une classe de modèle en sous-classes plus petites, chacune se concentrant sur une fonctionnalité spécifique. Par exemple, pour une application de commerce électronique, vous pouvez diviser la classe de modèle principale en un modèle de commande, un modèle de produit et un modèle client. Cette séparation contribue à améliorer la maintenabilité et la réutilisation du code. Utiliser l'injection de dépendances

Comment implémenter le modèle MVC en utilisant PHP Comment implémenter le modèle MVC en utilisant PHP Jun 07, 2023 pm 03:40 PM

Le modèle MVC (Model-View-Controller) est un modèle de conception logicielle couramment utilisé qui peut aider les développeurs à mieux organiser et gérer le code. Le modèle MVC divise l'application en trois parties : Modèle, Vue et Contrôleur, chaque partie a son propre rôle et ses propres responsabilités. Dans cet article, nous verrons comment implémenter le modèle MVC à l'aide de PHP. Modèle Un modèle représente les données et le traitement des données d'une application. en général,

Découvrir le succès du framework SpringMVC : pourquoi il est si populaire Découvrir le succès du framework SpringMVC : pourquoi il est si populaire Jan 24, 2024 am 08:39 AM

Le framework SpringMVC décrypté : Pourquoi est-il si populaire, des exemples de code spécifiques sont nécessaires Introduction : Dans le domaine actuel du développement logiciel, le framework SpringMVC est devenu un choix très populaire parmi les développeurs. Il s'agit d'un framework Web basé sur le modèle d'architecture MVC, offrant une méthode de développement flexible, légère et efficace. Cet article approfondira le charme du framework SpringMVC et démontrera sa puissance à travers des exemples de code spécifiques. 1. Avantages de SpringMVC Framework Méthode de configuration flexible Spr

Développer MVC avec le framework PHP8 : un guide étape par étape Développer MVC avec le framework PHP8 : un guide étape par étape Sep 11, 2023 am 10:05 AM

Développement de MVC avec le framework PHP8 : un guide étape par étape Introduction : MVC (Model-View-Controller) est un modèle d'architecture logicielle couramment utilisé pour séparer la logique, les données et l'interface utilisateur d'une application. Il fournit une structure qui sépare l'application en trois composants distincts pour une meilleure gestion et maintenance du code. Dans cet article, nous explorerons comment utiliser le framework PHP8 pour développer une application conforme au modèle MVC. Première étape : comprendre le modèle MVC Avant de commencer à développer une application MVC, je

Comment utiliser l'architecture MVC pour concevoir des projets en PHP Comment utiliser l'architecture MVC pour concevoir des projets en PHP Jun 27, 2023 pm 12:18 PM

Dans le développement Web, MVC (Model-View-Controller) est un modèle architectural couramment utilisé pour traiter et gérer les données, l'interface utilisateur et la logique de contrôle d'une application. En tant que langage de développement Web populaire, PHP peut également utiliser l'architecture MVC pour concevoir et créer des applications Web. Cet article présentera comment utiliser l'architecture MVC pour concevoir des projets en PHP, et expliquera ses avantages et ses précautions. Qu'est-ce que MVCMVC est un modèle d'architecture logicielle couramment utilisé dans les applications Web. VM

Du routage aux vues : une exploration approfondie de l'architecture MVC de Beego Du routage aux vues : une exploration approfondie de l'architecture MVC de Beego Jun 23, 2023 am 10:53 AM

Beego est un framework d'application Web basé sur le langage Go, qui présente les avantages de hautes performances, de simplicité et de facilité d'utilisation, ainsi que d'une grande évolutivité. Parmi eux, l'architecture MVC est l'un des concepts de conception de base du framework Beego. Elle peut aider les développeurs à mieux gérer et organiser le code, à améliorer l'efficacité du développement et la qualité du code. Cet article approfondira l'architecture MVC de Beego afin que les développeurs puissent mieux comprendre et utiliser le framework Beego. 1. Introduction à l'architecture MVC MVC, à savoir Model-View-Controller, est un

Explication détaillée de Spring MVC : analyse approfondie de ce framework puissant Explication détaillée de Spring MVC : analyse approfondie de ce framework puissant Dec 29, 2023 am 08:09 AM

SpringMVC est un framework de développement JavaWeb très populaire, largement apprécié pour ses fonctions puissantes et sa flexibilité. Son idée de conception est basée sur le modèle architectural MVC (Model-View-Controller), qui réalise le découplage et la modularisation de l'application en divisant l'application en trois parties : modèle, vue et contrôleur. Dans cet article, nous aborderons divers aspects du framework SpringMVC, notamment le traitement et le transfert des requêtes, le traitement des modèles et des vues,

See all articles