Third, realize your MODE layer MODEL layer, is the data processing layer in the MVC mode, is used to design and design to three concepts when conducting his design: ------ Model class. It is a physical class. Data used to save all the fields of the record of the database table. And you can verify this integrity of the recorded data. ------ ModelManager class. Is the management class of the entity class. Usually, each entity class (model) has a corresponding management class (ModelManager). The management class can be used to manage data records in the entity class (for example, delete / add / change .....). But the ModelManager class does not have to have a corresponding Model class. ------ DB class. Used to manage the connection to the database. ModeElManager class all the operations of data. It is achieved by this DB class. In the entire MVC mode. Only this DB class can operate directly. At the same time, only the ModelManager class can call the DB class. It seems that it is more troublesome. But actually is not complicated. This model layer design is designed. The shopping cart program for online shopping systems is extremely similar. Model can be seen as the information class of a single commodity in the shopping cart. Manager can be regarded as an order. Orders are used to manage procurement products. Here is a simple example. It should be relatively typical. Focus on his entire design and process. Take carefully. In fact, it is not difficult. Note: All classes and methods used in the following examples are simplified. The actual situation is much more complicated than this. but. As an example, it is already enough. Folder structure:
| - DB.PHP | - MODEL.PHP | - MANAGER.PHP | - MODELTEST1.PHP | - MODELTEST2.PHP | - MODELTEST3.PHP | - MODELTEST4.PHP | - MODELTEST4.PHP | - MODEL / | - MODEL / CLASSMODEL.PHP | - MODEL / StudentModel.php | - model / classmanager.php | It is the form of Student (student).
Class Table Field: CLS_ID --------- INT -------- NOT NULL CLS_NAME -------- String ----- Not null cls_address ----- String ----- Nullstudent Table field: stu_id --------- INT -------- Not Null Stu_clsid ------- Int -------- Not null STU_NAME -------- String ----- NULL
ClassModel.php entity class which is a table inside ClassModelClassManager.php class management class ClassModel ClassManagerStudentModel.php entity class which is a table inside StudentModelStudentManager.php student management class StudentManagerDb.php StudentModel which is a database management class operation His interface and normal usage are the same, but this example is only analog implementation of this excuse. Therefore, you can run without using a real database. File 0: (model.php) Model layer entity Basic class
php // The basic model of the information entity uses the basic class class model of the information entity, the data of this entity class, // example: array ("ID" => 1, "name" => "this is name"); var $ data; // This entity class data constraint information, used to determine the accuracy of the added $ DATA data // see: ClassModel Var $ match; // The name of the table in the database in the database VAR $ TABLE; / / Initializing Function Model ($ THIS-> DATA = & $ data;} // Setting the entity for a value Function Set ($ key, $ value) {$ this-> data [$ key ] = $ Value;} // Get a data of this entity Function Get ($ key) {Return $ this-> data [$ key];} // Get all the data for this entity Function getData () {Return $ this -> data;} // Get the constraint information of the entity Function getMatch () {Return $ this-> match;} // Verify the accuracy of the entity data and integrity Function isvalid () {foreach ($ this-> match as $ key => $ value) {if (! isset ($ value ["null"]) &&! isset ($ this-> data [$ key]) DIE ("$ key can not be empty"); / / ..... Can be added to other judgments, such as exceeding the maximum number of values, or long long .....}}}?> File 1: (manager.php) MODEL layer is based on entity management class
php // Foundation class class manager {// database management class object VAR $ db; // Initialization Function Manager () {$ this-> db = new db ();} // Used Insert entity information into the database Function INSERT ($ model) {$ model-> isvalid (); $ table = $ model-> table; $ match = $ model-> getMatch (); $ data = $ model-> getData (); $ Str1 = $ str2 = array (); foreach ($ match as $ key => $ value) {ix ($ data ($ data [$ key)) {$ str1 [] = $ key; $ str2 [ ] = ($ Value ["type"] == "c")? "/"""" ": $ data [$ key];}} $ sql =" INSERT INTO $ Table (". IMPLODE (", ", $ str2).") ""). ")"; return $ this-> db-> execute ($ sql);}} ?> File 2: (ClassModel.php) Class of Class Information
php // Communication Class ClassModel Extends Model {var $ data = array (); // $ match, // // type (i represents an integer, c represents a character Strings) // name is used to indicate whether the field name // null in the database table indicates whether the value of the field is allowed to be empty // ("NULL" in the array is indicated by the empty, otherwise it cannot be empty) VAR $ match = array ("CLS_ID" => Array ("name" => "cls_id", "type" => "i"), "cls_name" => array ("name" => "CLS_NAME", "TYPE "=>" C ")," CLS_ADDRESS "=> Array (" Name "=>" CLS_ADDRESS "," type "=>" c "," null "=> true)); var $ TABLE =" Class "; // Initialize Function ClassModel (& $ DATA) {Parent :: Model ($ data);} // Used to get this class of students' information function getStudent () {require_once "./model/studentmanager.php"; $ manager = New StudentManager (); $ classid = $ this-> get ("cls_id"); return $ manager-> getList ($ classid);}}?> File 3: (studEntModel.php) physical information
PHP // Entity class Class StudentModel Extends Model {var $ data = array (); // $ match (i represents integer, c represents characters) Strings) // name is used to indicate whether the field name // null in the database table indicates whether the value of the field is allowed to be empty // ("NULL" in the array is indicated by the empty, otherwise it cannot be empty) VAR $ match = array ("stu_id" => array ("name" => "stu_id", "type" => "i"), "stu_clsid" => array ("name" => "stu_clsid", "TYPE "=>" I ")," stu_name "=> Array (" name "=>" stu_name "," type "=>" c "," null "=> true); var $ table =" student "; // Initialize Function StudentModel (& $ DATA) {Parent :: Model ($ data);}}?> File 4: (ClassManager.php) class entity management class PHP // class entity information management class Class ClassModelManager Extends Manager {// Initialization Function ClassModelManager () {parent :: manager ();} // Get class list Function & getList () {$ sql = "select * from class"; return $ this-> db-> query ($ SQL);} // Find and return a class of physical classes Function & Findonemodel ($ ID) {$ SQL = "SELECT * FORM CLASS WHERE CLS_ID = $ ID"; $ data = $ this-> db-> getone ($ SQL ); If ($ data == null) DIE (" Class does not exist! "); Require_once" ./model/classmodel.php "; $ model = new classmodel ($ data); return $ model;}}?> File 5: (studEntManager.php) Student entity management class
PHP // Student Information Entity Management Class Class StudentManager Extends Manager {// Initialization Function StudentManager () {Parent :: Manager ();} // Get a class of students list Function & GetList ($ classid) {$ SQL = "Select * from student where stu_clsid = $ classid"; returnid $ this-> db-> query ($ sql);}}?> file 6: (db.php) database connection management class for sharing and manage Data Access. Since the content involved in this class is not the content to be discussed, this class simulates "Method of Real Database Management Class", the excuse is the same, but the content inside the interface function is not correct, just simulation The data. There are a lot of this kind of practice online, you can find yourself, (** Detailed introduction in the second chapter of this series).
PHP // Database Operation Management Class Class DB {// Database Piencing Var $ Con; // Initialization Function DB () {// $ this-> con = mysql_connect (************* ********); .........} // Execute Data Query Statement Function & Query ($ SQL) {// $ Result = MySQL_QUERY ($ SQL); .... ............ // Return $ Result; if ($ SQL == "Select * from student where stu_clsid = 2") Return Array ("0" => Array ("stu_id" => 1, "stu_clsid" => 2, "stu_name" => "stu_name"), "1" => array ("stu_id" => 2, "stu_clsid" => 2, "stu_name" => "student2" )); DIE ("empty class");} // Get a number of query results Function Getone ($ SQL) {// $ results = mysql_query ($ sql); ............. // Return $ Result [0]; if ($ SQL == "SELECT * FORM CLAS WHERE CLS_ID = 1") Return NULL; if ($ SQL == "SELECT * FORM CLASS WHERE CLS_ID = 2") Return Array (" CLS_ID "=> 2," CLS_NAME "=>" ClassName "," CLS_ADDRESS "=>" ClassAddress ");} // Execute Database Update / Add / Remove Statement Function Execute ($ SQL) {// MySQL_QUERY ($ SQL) (Echo "
Inserting operation
...
Insert operation
"; r ETURN TRUE;}?> Test file 1, (modeltest1.php) (Query class label (CLS_ID) 2 class student list)
";> The result is: No.: 1 ------ Name: student1 No .: 2 ---- - Name: Student2 Test Document II, (ModelTest2.php) (Query Class Number (CLS_ID) 1 class student list)
";> The result is:
The class does not exist! Test file three, (modeltest3.php) (add data to the Student table to the STUDENT table)
phperserror_reporting (e_all); Require_once "db.php"; request_once "mod" mod "manager.php"; $ data = array ("stu_id" => 3, "stu_clsid" => 2, "stu_name" => "student3"); Require_once "./model/studentmodel.php"; $ data); Require_once" ./model/studentManager.php"; $Manager = New StudentManager ($ data); $ Result = $ manager-> INSERT ($ model); Echo $ Result? "
Insert operation ... Insert operation completes the insertion operation Successfully test file four, (modeltest4.php) (Add data to the STUDENT table) Phperror_reporting (e_all); request_once "db.php"; request_once "Model.php"; require_once "manager.php"; $ data = array ("stu_id" => 3, "stu_name" => "student3"); Require_once "./model/studentmodel.php"; $MODEL = New StudentModel ($ DATA); Require_once "./model/studentmanager.php"; $ data); $ result = $ manager-> INSERT ($ model); Echo $ RESULT?"
The value of Stu_Clsid cannot be evaluated:
The value of "match" "Match" in StudentModel is not empty, and the code in the code is $ data = array ("stu_id" => 3, "stu_name" => "student3); lacks the value of the STU_CLSID, so it cannot Check the error by the integrity of the data.