用命名空間解決brophp中的反覆調用model類的bug

來源:互聯網
上載者:User
用命名空間解決brophp中的重複調用model類的bug
第一個項目完成了,雖然說自己很不滿意這個項目,但是無論如何,還是結束了。
因為自己小有基礎,而且不想用純面向過程和oop來做項目,所以第一個項目打算用架構來做
於是在項目前研究brophp代碼,在brophp基礎上做了一個“自己”的架構
說是自己的,其實只是自己看懂了brophp,對照這brophp重寫了一遍而已。

這個bug就是自己在項目中偶然發現的。
當時我在前台的common.class.php調用了D(‘user','admin‘)對使用者權限進行了驗證,然後在另外一個控制器裡面又使用D(‘user')對使用者資料進行更新
這樣就出錯了 提示不能重複定義UserModel類,這是調用了2個相同名字的類產生的問題
正如我們給類命名不能用memcache,mysqli一樣
當時趕項目,時間緊,沒敢深想,只是考慮了下比較容易解決辦法:對這兩個類都進行改名 加上項目名。

項目完,墮落了兩天,今天晚上又想起了這個問題,仔細思考了一下,突然想起來php5.3新加的命名空間就是為解決此類問題而增加的
翻了下手冊,研究了下這個新東西,確實解決了這個問題
在產生對於model編譯檔案的時候頭部加上命名空間定義
如home的UserModel.php
  1. namespace home;
  2. class UserModel extends \Dpdo {
  3. }

admin的Usermodel.php
  1. namespace admin;
  2. class UserModel extends \Dpdo {
  3. }

注意Dpdo前面的\ ,因為其他檔案沒有定義命名空間,所以屬於全域空間“如果沒有定義任何命名空間,所有的類與函數的定義都是在全域空間,與 PHP 引入命名空間概念前一樣。在名稱前加上首碼 \ 表示該名稱是全域空間中的名稱,即使該名稱位於其它的命名空間中時也是如此。 ”

再修改D方法 使模型執行個體化的的時候用以下的形式
  1. $h = new home\UserModel();
  2. $a = new admin\UserModel();


這樣就解決了這個重複調用類的問題。
具體代碼就不發了,有興趣的童鞋可以試下
其實最簡單的方法就是執行個體化的時候統一,比如都用D(‘user','admin‘),就不會出現這個問題
但是這是逃避問題,而不是解決問題。


  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.