php資料對象映射模式執行個體詳解

來源:互聯網
上載者:User
php中的設計模式中有很多的各種模式了,在這裡我們來為各位介紹一個不常用的資料對應模式吧,感興趣的朋友一起看下吧

資料對應模式使您能更好的組織你的應用程式與資料庫進行互動。

資料對應模式將對象的屬性與儲存它們的表欄位間的結合密度降低。資料對應模式的本質就是一個類,它映射或是翻譯類的屬性或是方法到資料庫的相應欄位,反之亦然。

資料對應的作用(工作)就在於能對雙方所呈現出的資訊的理解,並能對資訊的存取進行控制,如根據儲存在資料表中的資訊

重建新的域對象,或是用域對象的資訊來更新或刪除資料表中的相關資料。

對於物件導向代碼與資料庫表和欄位間的映射關係的儲存有多種實現方式。其中一種可能的方法就通過手工編碼將這種映射關係儲存在資料對應類中。

另一種可選的方法是用PHP的數組並將其編碼為類本身。這個類也能外源擷取資料,如INI或是XML檔案。

資料對象映射模式,是將對象和資料存放區映射起來,對一個對象的操作會映射為對資料存放區的操作。

在代碼中實現資料對象映射模式,實現一個ORM類,將複雜的sql語句映射成對象屬性的操作。對象關係映射(Object Relational Mapping,ORM)

ha_cl表

Hacl.php

<?phpnamespace 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 setha_cl_code = '{$this->haclcode}',ha_cl_name = '{$this->haclname}',hacls = '{$this->hacls}'where ID = {$this->id}limit 1");}}

Factory.php

<?phpnamespace 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

<?phpnamespace 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();

使用原廠模式會多次建立對象Hacl,浪費資源,如果將對象作為參數傳遞,一方面會帶來額外的使用成本,另外如果很多地方都用到這個對象很容易發生錯誤,因此在原廠模式中使用註冊樹模式來解決這個問題。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.