pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

<tfoot id='qUzfd'></tfoot>
  • <small id='qUzfd'></small><noframes id='qUzfd'>

      <i id='qUzfd'><tr id='qUzfd'><dt id='qUzfd'><q id='qUzfd'><span id='qUzfd'><b id='qUzfd'><form id='qUzfd'><ins id='qUzfd'></ins><ul id='qUzfd'></ul><sub id='qUzfd'></sub></form><legend id='qUzfd'></legend><bdo id='qUzfd'><pre id='qUzfd'><center id='qUzfd'></center></pre></bdo></b><th id='qUzfd'></th></span></q></dt></tr></i><div class="br8jeu3" id='qUzfd'><tfoot id='qUzfd'></tfoot><dl id='qUzfd'><fieldset id='qUzfd'></fieldset></dl></div>

    1. <legend id='qUzfd'><style id='qUzfd'><dir id='qUzfd'><q id='qUzfd'></q></dir></style></legend>

        • <bdo id='qUzfd'></bdo><ul id='qUzfd'></ul>

        PHP pdo 實例作為私有靜態屬性

        PHP pdo instance as private static property(PHP pdo 實例作為私有靜態屬性)
          • <tfoot id='1J4Xz'></tfoot>

              <i id='1J4Xz'><tr id='1J4Xz'><dt id='1J4Xz'><q id='1J4Xz'><span id='1J4Xz'><b id='1J4Xz'><form id='1J4Xz'><ins id='1J4Xz'></ins><ul id='1J4Xz'></ul><sub id='1J4Xz'></sub></form><legend id='1J4Xz'></legend><bdo id='1J4Xz'><pre id='1J4Xz'><center id='1J4Xz'></center></pre></bdo></b><th id='1J4Xz'></th></span></q></dt></tr></i><div class="ixofqn3" id='1J4Xz'><tfoot id='1J4Xz'></tfoot><dl id='1J4Xz'><fieldset id='1J4Xz'></fieldset></dl></div>

              <small id='1J4Xz'></small><noframes id='1J4Xz'>

                <tbody id='1J4Xz'></tbody>
                  <bdo id='1J4Xz'></bdo><ul id='1J4Xz'></ul>

                  <legend id='1J4Xz'><style id='1J4Xz'><dir id='1J4Xz'><q id='1J4Xz'></q></dir></style></legend>
                  本文介紹了PHP pdo 實例作為私有靜態屬性的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                  問題描述

                  我正在嘗試基于 OOP 設計我的網站,但是我在如何設計數據庫連接方面遇到了麻煩.目前,我正在一個抽象類 Connector 中創建一個私有靜態 PDO 對象.顯然,任何需要與數據庫交互的東西都會擴展這個類.我一直在反復討論如何確保腳本中只有一個連接或 PDO 對象,因為有些頁面將需要多個擴展連接器的類.許多人似乎為此目的推薦單例模式,但我目前的做法似乎可以完成同樣的事情.

                  I'm attempting to design my website based on OOP, but I'm having trouble with how to design the database connection. Currently, I'm creating a private static PDO object in an abstract class, Connector. Obviously, anything that needs to interact with the database will extend this class. I've been flipping back and forth on how to make sure that there is only ever one connection, or PDO object, in a script because some pages will need more than one class that extends Connector. Many people seem to recommend a Singleton pattern for this purpose, but the way I currently do it seems to accomplish the same thing.

                  這是我當前的代碼.

                  abstract class Connector
                  {
                      private static $dbh;
                  
                      public function __construct()
                      {
                          try
                          {
                              self::$dbh = new PDO(...);
                              self::$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                          }
                          catch(PDOException $e)
                          {
                              die($e->getMessage());
                          }
                      }
                  
                      public function getDB()
                      {
                          return self::$dbh;
                      }
                  }
                  

                  然后任何子類都會像這樣使用它.

                  Then any subclasses would use it like this.

                  class Subclass extends Connector
                  {
                      public function interactWithDB()
                      {
                          $stmt = $this->getDB()->prepare(...);
                          // etc...
                      }
                  }
                  

                  理論上,我認為子類的每個實例都應該訪問同一個 PDO 實例.這段代碼是否真的有意義,或者我是否以某種方式誤解了靜態屬性?是設計/實踐不好還是單例有更多優勢?

                  Theoretically, each instance of a subclass should always be accessing the same PDO instance, I think. Does this code actually make sense and or am I misunderstanding static properties somehow? Is it bad design/practice and or does Singleton have more advantages?

                  如果有什么不清楚的可以評論,謝謝!

                  Comment if something's not clear, thanks!

                  Connector 類的存在并不是為了保存 PDO 對象.它的析構函數關閉連接(使其為空)并且它包含諸如 isValueTaken 之類的函數,它檢查一個值是否已經在數據庫中.它有以下抽象函數

                  The Connector class wasn't meant to exist just to hold the PDO object. It's destructor closes the connection(makes it null) and it contains functions such isValueTaken, which checks if a value is already in the database. It has the following abstract functions

                  abstract function retrieveData();
                  abstract function setData();
                  

                  例如,我有一個擴展連接器的用戶類.它定義了 setData() 來在數據庫中注冊用戶.我不知道這是否會對響應產生影響.

                  For example I have a User class that extends Connector. It's defines setData() to register a user in the database. I don't know if this makes a difference to the response.

                  推薦答案

                  顯然,任何需要與數據庫交互的東西都會擴展這個類.

                  Obviously, anything that needs to interact with the database will extend this class.

                  從 OOP 的角度來看,這真的毫無意義.當某個類擴展另一個暗示是"關系的類時.如果你走這條路,你將很難不違反OCPSOLID 中的字母之一.

                  This really makes no sense from an OOP perspective. When some class extends another class that implies an "is a" relationship. If you go this route you are going to have a hard time not violating OCP which is one of the letters in SOLID.

                  我一直在反復討論如何確保腳本中只有一個連接或 PDO 對象,因為有些頁面需要不止一個擴展連接器的類.

                  I've been flipping back and forth on how to make sure that there is only ever one connection, or PDO object, in a script because some pages will need more than one class that extends Connector.

                  簡單!只需創建一個實例.

                  Easy! Just create one instance.

                  許多人似乎為此目的推薦單例模式,但我目前的做法似乎可以完成同樣的事情.

                  Many people seem to recommend a Singleton pattern for this purpose, but the way I currently do it seems to accomplish the same thing.

                  很多像這樣的人對 OOP 原則一無所知.使用單例只會引入一個花哨的"全局實例/狀態.

                  Many people like that have no clue about OOP principles. Using an singleton just introduces a "fancy" global instance / state.

                  這段代碼是否真的有意義,或者我是否以某種方式誤解了靜態屬性?

                  Does this code actually make sense and or am I misunderstanding static properties somehow?

                  說實話更多是對OOP的誤解.

                  To be honest it is more a misunderstanding of OOP.

                  這是糟糕的設計/實踐還是單例模式有更多優勢?

                  Is it bad design/practice and or does Singleton have more advantages?

                  見上文.

                  您應該做的(在 OOP 中)是注入數據庫連接需要它.這使您的代碼松散耦合,從而使您的代碼更易于維護、可測試、可調試和靈活.

                  What you should do (in OOP) is inject the database connection into the classes that need it. This makes your code loosely coupled which in turn makes your code better maintainable, testable, debuggable and flexible.

                  我也不太明白為什么需要為 pdo 連接創建數據庫類,因為 PDO API 本身已經是 OOP.因此,除非您有真正的理由為 PDO 編寫適配器(可能是這種情況,因為有一些),否則我會放棄它.

                  Also I don't really see why you need to create a database class for a pdo connection, because the PDO API itself is already OOP. So unless you have a real reason to write a adapter (can be the case, because there are some) for PDO I would just drop it.

                  我的 0.02 歐元

                  --

                  回應您的

                  Connector 類的存在并不是為了保存 PDO 對象.它的析構函數關閉連接(使其為空).

                  The Connector class wasn't meant to exist just to hold the PDO object. It's destructor closes the connection(makes it null).

                  通常根本不需要關閉連接.處理請求后連接將自動關閉(除非我們談論的是持久連接).

                  There is often no need at all to close the connection. The connection will automatically be closed once the request is handled (unless we are talking about a persistent connection).

                  并且它包含諸如 isValueTaken 之類的函數,它檢查一個值是否已經存在于數據庫中.它有以下抽象函數

                  and it contains functions such isValueTaken, which checks if a value is already in the database. It has the following abstract functions

                  這聽起來像是另一個班級的工作.

                  That sounds like a job for another class.

                  例如,我有一個擴展連接器的用戶類.它定義了 setData() 來在數據庫中注冊用戶.我不知道這是否會對響應產生影響.

                  For example I have a User class that extends Connector. It's defines setData() to register a user in the database. I don't know if this makes a difference to the response.

                  不,我的觀點仍然成立.用戶不需要從數據庫繼承.這聽起來是不是很奇怪.從數據庫繼承的用戶(我不想見到那個人).如果需要,您應該將數據庫連接注入到用戶中.

                  No my point still stands. There is no need for a user to inherit from a database. Doesn't that sounds strange. A user inheriting from a database (I don't want to meet that person). You should inject the database connection into the User if it is needed.

                  這篇關于PHP pdo 實例作為私有靜態屬性的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

                  【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

                  相關文檔推薦

                  Deadlock exception code for PHP, MySQL PDOException?(PHP、MySQL PDOException 的死鎖異常代碼?)
                  PHP PDO MySQL scrollable cursor doesn#39;t work(PHP PDO MySQL 可滾動游標不起作用)
                  PHP PDO ODBC connection(PHP PDO ODBC 連接)
                  Using PDO::FETCH_CLASS with Magic Methods(使用 PDO::FETCH_CLASS 和魔術方法)
                  php pdo get only one value from mysql; value that equals to variable(php pdo 只從 mysql 獲取一個值;等于變量的值)
                  MSSQL PDO could not find driver(MSSQL PDO 找不到驅動程序)
                    <tfoot id='1NGsy'></tfoot>

                        <tbody id='1NGsy'></tbody>
                      • <bdo id='1NGsy'></bdo><ul id='1NGsy'></ul>

                            <small id='1NGsy'></small><noframes id='1NGsy'>

                          1. <i id='1NGsy'><tr id='1NGsy'><dt id='1NGsy'><q id='1NGsy'><span id='1NGsy'><b id='1NGsy'><form id='1NGsy'><ins id='1NGsy'></ins><ul id='1NGsy'></ul><sub id='1NGsy'></sub></form><legend id='1NGsy'></legend><bdo id='1NGsy'><pre id='1NGsy'><center id='1NGsy'></center></pre></bdo></b><th id='1NGsy'></th></span></q></dt></tr></i><div class="7ny2jt8" id='1NGsy'><tfoot id='1NGsy'></tfoot><dl id='1NGsy'><fieldset id='1NGsy'></fieldset></dl></div>
                            <legend id='1NGsy'><style id='1NGsy'><dir id='1NGsy'><q id='1NGsy'></q></dir></style></legend>
                          2. 主站蜘蛛池模板: 杭州荣奥家具有限公司-浙江办公家具,杭州办公家具厂 | 刺绳_刀片刺网_刺丝滚笼_不锈钢刺绳生产厂家_安平县浩荣金属丝网制品有限公司-安平县浩荣金属丝网制品有限公司 | 江苏南京多语种翻译-专业翻译公司报价-正规商务翻译机构-南京华彦翻译服务有限公司 | 杭州代理记账多少钱-注册公司代办-公司注销流程及费用-杭州福道财务管理咨询有限公司 | 山东钢格板|栅格板生产厂家供应商-日照森亿钢格板有限公司 | 高防护蠕动泵-多通道灌装系统-高防护蠕动泵-www.bjhuiyufluid.com慧宇伟业(北京)流体设备有限公司 | 非标压力容器_碳钢储罐_不锈钢_搪玻璃反应釜厂家-山东首丰智能环保装备有限公司 | 废气处理设备-工业除尘器-RTO-RCO-蓄热式焚烧炉厂家-江苏天达环保设备有限公司 | 政府园区专业委托招商平台_助力企业选址项目快速落地_东方龙商务集团 | 济南网站建设|济南建网站|济南网站建设公司【济南腾飞网络】【荐】 | 百度爱采购运营研究社社群-店铺托管-爱采购代运营-良言多米网络公司 | 浩方智通 - 防关联浏览器 - 跨境电商浏览器 - 云雀浏览器 | 安徽成考网-安徽成人高考网| 重庆磨床过滤机,重庆纸带过滤机,机床伸缩钣金,重庆机床钣金护罩-重庆达鸿兴精密机械制造有限公司 | 菲希尔FISCHER测厚仪-铁素体检测仪-上海吉馨实业发展有限公司 | 亚克力制品定制,上海嘉定有机玻璃加工制作生产厂家—官网 | 北京中创汇安科贸有限公司 | 杭州公司变更法人-代理记账收费价格-公司注销代办_杭州福道财务管理咨询有限公司 | 乐考网-银行从业_基金从业资格考试_初级/中级会计报名时间_中级经济师 | 专注提供国外机电设备及配件-工业控制领域一站式服务商-深圳市华联欧国际贸易有限公司 | 高低温试验箱-模拟高低温试验箱订制-北京普桑达仪器科技有限公司【官网】 | 塑料异型材_PVC异型材_封边条生产厂家_PC灯罩_防撞扶手_医院扶手价格_东莞市怡美塑胶制品有限公司 | PSI渗透压仪,TPS酸度计,美国CHAI PCR仪,渗透压仪厂家_价格,微生物快速检测仪-华泰和合(北京)商贸有限公司 | 防渗土工膜|污水处理防渗膜|垃圾填埋场防渗膜-泰安佳路通工程材料有限公司 | 铝合金线槽_铝型材加工_空调挡水板厂家-江阴炜福金属制品有限公司 | 上海网站建设-上海网站制作-上海网站设计-上海做网站公司-咏熠软件 | 长沙广告公司|长沙广告制作设计|长沙led灯箱招牌制作找望城湖南锦蓝广告装饰工程有限公司 | 物联网卡_物联网卡购买平台_移动物联网卡办理_移动联通电信流量卡通信模组采购平台? | 运动木地板厂家_体育木地板安装_篮球木地板选购_实木运动地板价格 | 企业微信scrm管理系统_客户关系管理平台_私域流量运营工具_CRM、ERP、OA软件-腾辉网络 | 慢回弹测试仪-落球回弹测试仪-北京冠测精电仪器设备有限公司 | 泵阀展|阀门展|水泵展|流体机械展 -2025上海国际泵管阀展览会flowtech china | ★塑料拖链__工程拖链__电缆拖链__钢制拖链 - 【上海闵彬】 | 收录网| 管理会计网-PCMA初级管理会计,中级管理会计考试网站 | 杭州火蝠电商_京东代运营_拼多多全托管代运营【天猫代运营】 | 东莞办公家具厂家直销-美鑫【免费3D效果图】全国办公桌/会议桌定制 | 福尔卡(北京)新型材料技术股份有限公司 | 复盛空压机配件-空气压缩机-复盛空压机(华北)总代理 | 钢骨架轻型板_膨石轻型板_钢骨架轻型板价格_恒道新材料 | 公交驾校-北京公交驾校欢迎您! 工作心得_读书心得_学习心得_找心得体会范文就上学道文库 |