Rumah 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>
Salin selepas log masuk
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Seni Bina PHP MVC: Membina Aplikasi Web untuk Masa Depan Seni Bina PHP MVC: Membina Aplikasi Web untuk Masa Depan Mar 03, 2024 am 09:01 AM

Pengenalan Dalam dunia digital yang berkembang pesat hari ini, adalah penting untuk membina aplikasi WEB yang mantap, fleksibel dan boleh diselenggara. Seni bina PHPmvc menyediakan penyelesaian yang ideal untuk mencapai matlamat ini. MVC (Model-View-Controller) ialah corak reka bentuk yang digunakan secara meluas yang memisahkan pelbagai aspek aplikasi kepada komponen bebas. Asas seni bina MVC Prinsip teras seni bina MVC ialah pengasingan kebimbangan: Model: merangkum data dan logik perniagaan aplikasi. Lihat: Bertanggungjawab untuk membentangkan data dan mengendalikan interaksi pengguna. Pengawal: Menyelaras interaksi antara model dan pandangan, mengurus permintaan pengguna dan logik perniagaan. Seni Bina PHPMVC Seni bina phpMVC mengikut corak MVC tradisional tetapi juga memperkenalkan ciri khusus bahasa. Berikut ialah PHPMVC

Panduan lanjutan untuk seni bina PHP MVC: membuka kunci ciri lanjutan Panduan lanjutan untuk seni bina PHP MVC: membuka kunci ciri lanjutan Mar 03, 2024 am 09:23 AM

Seni bina MVC (Model-View-Controller) adalah salah satu corak yang paling popular dalam pembangunan PHP kerana ia menyediakan struktur yang jelas untuk mengatur kod dan memudahkan pembangunan aplikasi WEB. Walaupun prinsip asas MVC mencukupi untuk kebanyakan aplikasi web, ia mempunyai beberapa had untuk aplikasi yang perlu mengendalikan data kompleks atau melaksanakan fungsi lanjutan. Mengasingkan lapisan model Mengasingkan lapisan model ialah teknik biasa dalam seni bina MVC lanjutan. Ia melibatkan memecahkan kelas model kepada subkelas yang lebih kecil, setiap satu memfokuskan pada fungsi tertentu. Contohnya, untuk aplikasi e-dagang, anda mungkin menguraikan kelas model utama kepada model pesanan, model produk dan model pelanggan. Pemisahan ini membantu meningkatkan kebolehselenggaraan dan kebolehgunaan semula kod. Gunakan suntikan pergantungan

Bagaimana untuk melaksanakan corak MVC menggunakan PHP Bagaimana untuk melaksanakan corak MVC menggunakan PHP Jun 07, 2023 pm 03:40 PM

Corak MVC (Model-View-Controller) ialah corak reka bentuk perisian yang biasa digunakan yang boleh membantu pembangun mengatur dan mengurus kod dengan lebih baik. Corak MVC membahagikan aplikasi kepada tiga bahagian: Model, View dan Controller, setiap bahagian mempunyai peranan dan tanggungjawabnya sendiri. Dalam artikel ini, kita akan membincangkan cara melaksanakan corak MVC menggunakan PHP. Model Model A mewakili data aplikasi dan pemprosesan data. secara amnya,

Mendedahkan kejayaan rangka kerja SpringMVC: mengapa ia begitu popular Mendedahkan kejayaan rangka kerja SpringMVC: mengapa ia begitu popular Jan 24, 2024 am 08:39 AM

Rangka kerja SpringMVC dinyahsulit: Mengapakah ia begitu popular, contoh kod khusus diperlukan Pengenalan: Dalam bidang pembangunan perisian hari ini, rangka kerja SpringMVC telah menjadi pilihan yang sangat popular di kalangan pembangun. Ia adalah rangka kerja Web berdasarkan corak seni bina MVC, menyediakan kaedah pembangunan yang fleksibel, ringan dan cekap. Artikel ini akan menyelidiki daya tarikan rangka kerja SpringMVC dan menunjukkan kuasanya melalui contoh kod tertentu. 1. Kelebihan rangka kerja SpringMVC Kaedah konfigurasi fleksibel Spr

Cara menggunakan seni bina MVC untuk mereka bentuk projek dalam PHP Cara menggunakan seni bina MVC untuk mereka bentuk projek dalam PHP Jun 27, 2023 pm 12:18 PM

Dalam pembangunan Web, MVC (Model-View-Controller) ialah corak seni bina yang biasa digunakan untuk memproses dan mengurus data aplikasi, antara muka pengguna dan logik kawalan. Sebagai bahasa pembangunan web yang popular, PHP juga boleh menggunakan seni bina MVC untuk mereka bentuk dan membina aplikasi web. Artikel ini akan memperkenalkan cara menggunakan seni bina MVC untuk mereka bentuk projek dalam PHP, dan menerangkan kelebihan dan langkah berjaga-jaganya. Apa itu MVCMVC ialah corak seni bina perisian yang biasa digunakan dalam aplikasi web. MV

Membangunkan MVC dengan Rangka Kerja PHP8: Panduan Langkah demi Langkah Membangunkan MVC dengan Rangka Kerja PHP8: Panduan Langkah demi Langkah Sep 11, 2023 am 10:05 AM

Membangunkan MVC dengan rangka kerja PHP8: Panduan langkah demi langkah Pengenalan: MVC (Model-View-Controller) ialah corak seni bina perisian yang biasa digunakan yang digunakan untuk memisahkan logik, data dan antara muka pengguna aplikasi. Ia menyediakan struktur yang memisahkan aplikasi kepada tiga komponen berbeza untuk pengurusan dan penyelenggaraan kod yang lebih baik. Dalam artikel ini, kami akan meneroka cara menggunakan rangka kerja PHP8 untuk membangunkan aplikasi yang mematuhi corak MVC. Langkah Satu: Fahami Corak MVC Sebelum mula membangunkan aplikasi MVC, I

Daripada laluan kepada pemandangan—penerokaan mendalam seni bina MVC Beego Daripada laluan kepada pemandangan—penerokaan mendalam seni bina MVC Beego Jun 23, 2023 am 10:53 AM

Beego ialah rangka kerja aplikasi web berdasarkan bahasa Go, yang mempunyai kelebihan prestasi tinggi, kesederhanaan dan kemudahan penggunaan serta kebolehskalaan yang tinggi. Antaranya, seni bina MVC ialah salah satu konsep reka bentuk teras rangka kerja Beego Ia boleh membantu pembangun mengurus dan mengatur kod dengan lebih baik, meningkatkan kecekapan pembangunan dan kualiti kod. Artikel ini akan menyelidiki seni bina MVC Beego supaya pembangun dapat memahami dan menggunakan rangka kerja Beego dengan lebih baik. 1. Pengenalan kepada seni bina MVC MVC, atau Model-View-Controller, adalah perkara biasa

Membangunkan MVC dengan rangka kerja PHP8: Konsep dan teknik penting yang perlu diketahui oleh pemula Membangunkan MVC dengan rangka kerja PHP8: Konsep dan teknik penting yang perlu diketahui oleh pemula Sep 11, 2023 am 09:43 AM

Membangunkan MVC dengan rangka kerja PHP8: Konsep dan teknik penting yang perlu diketahui oleh pemula Pengenalan: Dengan perkembangan pesat Internet, pembangunan Web memainkan peranan penting dalam industri pembangunan perisian masa kini. PHP digunakan secara meluas untuk pembangunan web, dan terdapat banyak rangka kerja matang yang membantu pembangun membina aplikasi dengan lebih cekap. Antaranya, seni bina MVC (Model-View-Controller) adalah salah satu corak yang paling biasa dan digunakan secara meluas. Artikel ini akan memperkenalkan cara pemula boleh menggunakan rangka kerja PHP8 untuk membangunkan aplikasi MVC.

See all articles