zoukankan      html  css  js  c++  java
  • PHP的MVC实现(2)

    控制器实际上是用来触发模型的数据和视图元素之间的绑定的控件。

      例子

      这里是一个使用MVC模式的简单例子。
    首先我们需要一个数据库访问类,它是一个普通类。

    以下是代码片段:
    <?php  
    /**  
    * A simple class for querying MySQL  
    */  
    class DataAccess {  
    /**  
    * Private  
    * $db stores a database resource  
    */  
    var $db;  
    /**  
    * Private  
    * $query stores a query resource  
    */  
    var $query// Query resource  
    //! A constructor.  
    /**  
    * Constucts a new DataAccess object  
    * @param $host string hostname for dbserver  
    * @param $user string dbserver user  
    * @param $pass string dbserver user password  
    * @param $db string database name  
    */  
    function DataAccess ($host,$user,$pass,$db) {  
    $this->db=mysql_pconnect($host,$user,$pass);  
    mysql_select_db($db,$this->db);  
    }  
    //! An accessor  
    /**  
    * Fetches a query resources and stores it in a local member  
    * @param $sql string the database query to run  
    * @return void  
    */  
    function fetch($sql) {  
    $this->query=mysql_unbuffered_query($sql,$this->db); // Perform query here  
    }  
    //! An accessor  
    /**  
    * Returns an associative array of a query row  
    * @return mixed  
    */  
    function getRow () {  
    if ( 
    $row=mysql_fetch_array($this->query,MYSQL_ASSOC) )  
    return 
    $row;  
    else  
    return 
    false;  
    }  
    }  
    ?> 

      在它上边放上模型。

    以下是代码片段:
    <?php  
    /**  
    * Fetches "products" from the database  
    */  
    class ProductModel {  
    /**  
    * Private  
    * $dao an instance of the DataAccess class  
    */  
    var $dao;  
    //! A constructor.  
    /**  
    * Constucts a new ProductModel object  
    * @param $dbobject an instance of the DataAccess class  
    */  
    function ProductModel (&$dao) {  
    $this->dao=& $dao;  
    }  
    //! A manipulator  
    /**  
    * Tells the $dboject to store this query as a resource  
    * @param $start the row to start from  
    * @param $rows the number of rows to fetch  
    * @return void  
    */  
    function listProducts($start=1,$rows=50) {  
    $this->dao->fetch("SELECT * FROM products LIMIT ".$start.", ".$rows);  
    }  
    //! A manipulator  
    /**  
    * Tells the $dboject to store this query as a resource  
    * @param $id a primary key for a row  
    * @return void  
    */  
    function listProduct($id) {  
    $this->dao->fetch("SELECT * FROM products WHERE PRODUCTID=’".$id."’");  
    }  
    //! A manipulator  
    /**  
    * Fetches a product as an associative array from the $dbobject  
    * @return mixed  
    */  
    function getProduct() {  
    if ( 
    $product=$this->dao->getRow() )  
    return 
    $product;  
    else  
    return 
    false;  
    }  
    }  
    ?> 

      有一点要注意的是,在模型和数据访问类之间,它们的交互从不会多于一行??没有多行被传送,那样会很快使程式慢下来。同样的程式对于使用模式的类,它只需要在内存中保留一行(Row)??其他的交给已保存的查询资源(query resource)??换句话说,我们让MYSQL替我们保持结果。
  • 相关阅读:
    OPENCV(3) —— 对XML和YAML文件实现I/O 操作
    OPENCV(2) —— Basic Structures(二)
    OPENCV(2) —— Basic Structures(一)
    OPENCV(1)
    转:计算机视觉相关领域代码集
    ScSPM
    ScSPM & LLC
    Spatial Pyramid Matching
    Convolution & Pooling exercise
    Restricted Boltzmann Machines
  • 原文地址:https://www.cnblogs.com/kuyuecs/p/1274527.html
Copyright © 2011-2022 走看看