Design patterns in phpThere are many various patterns in it. Here we will introduce a less commonly used data mapping pattern to you. Friends who are interested can take a look.
Data mapping mode allows you to better organize your application to interact with the database.
The data mapping mode reduces the density of the combination between the attributes of the object and the table fields in which they are stored. The essence of the data mapping pattern is a class, which maps or translates the attributes or methods of the class to the corresponding fields of the database, and vice versa.
The role (work) of data mapping is to understand the information presented by both parties and to control the access to the information, such as based on the information stored in the data table
Rebuild a new domain object, or use domain object information to update or delete related data in the data table.
There are many ways to implement the storage of mapping relationships between object-orientedcode and database tables and fields. One possible method is to store this mapping relationship in the data mapping class by hand coding.
An alternative is to use PHP arrays and encode them into the class itself. This class can also obtain data from external sources, such as INI or XML files.
The data object mapping mode maps objects and data storage. Operations on an object will be mapped to operations on data storage.
Implement the data object mapping mode in the code and implement an ORM class to map complex SQL statements into object attribute operations. Object Relational Mapping (ORM)
ha_cl table
Hacl.php
<?php namespace Baobab; class Hacl{ public $id; public $haclname; public $haclcode; public $hacls; protected $db; function construct($id){ $this->db = new \Baobab\Database\Mysqli(); $this->db->connect('127.0.0.1', 'root', '', 'test'); $res = $this->db->query("select * from ha_cl where id = {$id}"); $data = $res->fetch_assoc(); $this->id = $data['ID']; $this->haclname = $data['ha_cl_name']; $this->haclcode = $data['ha_cl_code']; $this->hacls = $data['hacls']; } function destruct(){ $this->db->query("update ha_cl set ha_cl_code = '{$this->haclcode}', ha_cl_name = '{$this->haclname}', hacls = '{$this->hacls}' where ID = {$this->id} limit 1"); } }
Factory.php
<?php namespace Baobab; class Factory{ static function getHacl($id){ $key = 'user_'.$id; $user = \Baobab\Register::get($key);//表中id不同表示的是不同的对象 if(!$user){ $user = new \Baobab\Hacl($id); \Baobab\Register::set($key, $user); } return $user; } }
Register.php
<?php namespace Baobab; class Register{ protected static $objects; static function set($alias, $object){ self::$objects[$alias] = $object; } static function _unset($alias) { unset(self::$objects[$alias]); } static function get($name) { return self::$objects[$name]; } }
index .php
class Page{ function index(){ $hacl = Baobab\Factory::getHacl(13); $hacl->haclname = '测试名称'; $this->test(); echo 'ok'; } function test(){ $hacl = Baobab\Factory::getHacl(13); $hacl->hacls = '测试内容'; } } $page = new Page(); $page->index();
Using factory modewill create objects multiple timesHacl, which is a waste of resources. If the object is passed as a parameter, it will bring additional The cost of use, and if this object is used in many places, errors are easy to occur, so the registration tree mode is used in the factory mode to solve this problem.
The above is the detailed content of Detailed explanation of PHP data object mapping mode examples. For more information, please follow other related articles on the PHP Chinese website!