PHP头条
热点:

200行描述MVC-PHP源码


200行大点,读完kohana总结的一点笔记。

 $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 '错误指定页面';
             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 = '.html')
        {
            $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('php://input'); 
           //print_r($body);  //结果为  member_id=1234567    enctype="multipart/form-data"
          // print_r($_POST); //结果为  Array ( [member_id] => 1234567 )  
           

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

           public static function find_file($paths=array(),$name)
           {
                $name=ucfirst($name).'.php';
                $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__,'loadFile') );
            }
        
            // 注册自动装载机2   //如有必要注册多个自动加载函数
            static public function autoLoad2()   
            {
                spl_autoload_register( array(__CLASS__,'loadFile2') );
            }
    }
     
    
    
    abstract class DB{
            public $db=NULL;
            public $table=NULL;
            public $config=array(
                           'dsn'=>'mysql:dbname=test;host=127.0.0.1',
                           'user'=>'root',
                           'password'=>'root',
						   'charset'=>'utf8',
						   'persistent'=>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 ['charset'];
				if($this->config ['persistent']){
					$this->options[PDO::ATTR_PERSISTENT] = true;
				} 
				try {
				   // 长连接,如有需要将array(PDO::ATTR_PERSISTENT=>true) 作为第四个参数
				  $this->db=$pdo = new \PDO ( $this->config ['dsn'],$this->config ['user'],$this->config ['password'],$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('set names utf8');
				 } 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 = 'insert into ' . $this->table . ' (' . implode(',',array_keys($arr)) . ')';
                $sql .= " values ('";
                $sql .= implode("','",array_values($arr));
                $sql .= "')"; 
                $stmt = $this->db->prepare($sql);
                $stmt->execute($arr); 
               echo $this->db->lastinsertid();   
           } 
           
           public function update($arr,$where = ' where 1 limit 1'){ /*修改*/
            //$sql = "UPDATE `user` SET `password`=:password WHERE `user_id`=:userId";   
            $sql = 'update ' . $this->table .' set ';
            foreach($arr as $k=>$v) {
                $sql .= $k . "='" . $v ."',";
            }
             $sql = rtrim($sql,',');
             $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》

www.phpzy.comtrue/php/33375.htmlTechArticle200行描述MVC-PHP源码 200行大点,读完kohana总结的一点笔记。 $val) { $value[$key] = self::sanitize($val); } } elseif (is_string($value)) { if (self::$magic_quotes === TRUE) { $value = stripslashes($value); } if (strpos($val...

相关文章

PHP之友评论

今天推荐