PHP分類文章 顯示方式:簡文 | 列表

2008年03月25日

關於分割程式功能以及 mix-in 和 include

Tags: php reflection mix-in include
最近碰到一個分割程式功能的問題,不得已必須用到反映的功能,寫了一個簡單的抽象插件類別 http://blog.pixnet.net/HACGIS/post/15612808。 不知道你有沒有更好的解法? tokimeki

關於這個問題,我是用所謂「混成(mix-in)」的概念實踐。先前我寫過2篇: PHP 實踐 mix-in 概念PHP 實踐 mix-in 概念 part 2

另外一位網友是用 include ,參考: mix-in?。嚴格來說那不是 mix-n ,稍後說明。這有3個缺點。

...繼續閱讀

Posted by shirock at 樂多Roodo!17:59回應(6)引用(0)

2008年02月21日

Extend core libraries of CodeIgniter to detect the request file type and load applicable view

Tags: CodeIgniter

I extend core libraries of CodeIgniter to detect the request file type and load applicable view. The other way is use URI Route, see '文件格式之 URI Route Rule 與 CodeIgniter 之實作示範'.

What I want to do is that if user request 'http://localhost/ci/blogs/index.xml', it will try to load a view for XML. In other cases:

  • If request 'blogs/index', load 'views/index.php' to render HTML document (default type).
  • If request 'blogs/index.xml', load 'views/index.xml.php' to render XML document.
  • If request 'blogs/index.pdf', load 'views/index.pdf.php' to render PDF document.
  • and so on.
...繼續閱讀

Posted by shirock at 樂多Roodo!15:33回應(0)引用(0)

2008年02月20日

文件格式之 URI Route Rule 與 CodeIgniter 之實作示範

Tags: php CodeIgniter

我習慣將控制元件行為的最後一個參數,設為文件(呈現內容)的"格式",如使用者想要 XML 格式的回傳內容,則傳入 'xml'。例如:

程式定義:
  class Controller {
    function method( docType ) {
      // return result as a XML document.
    }
  }
  var controller = new Controller;

調用控制項時的 URI:
  controller/method/xml
  # invoke  controller->method('xml');

不過,我更喜歡將"文件格式"這個參數放在 URI 的副檔名部份。這部份我放在文章後段。

...繼續閱讀

Posted by shirock at 樂多Roodo!16:49回應(0)引用(1)

2008年02月14日

PHP如何取得虛擬主機名稱及瀏覽器適用的地區語文資訊

在 HTTP 協定(RFC2612) 中提到, Host 可用於得知使用者存取主機資源時會使用的主機名稱,供 HTTP Server 判斷虛擬主機設置。Accept-Language 可用於得知使用者的地區語文清單。服務者可根據此清單內容,呈現最適用於使用者的地區語文內容。

在 PHP 中,可藉由全域變數 $_SERVER['HTTP_HOST']$_SERVER['SERVER_NAME'] 取得 Host 內容。$_SERVER['HTTP_ACCEPT_LANGUAGE'] 取得瀏覽器適用的語文清單。

HTTP_HOST, SERVER_NAME should be the same. However, SERVER_NAME looks like only available in Apache2.

...繼續閱讀

Posted by shirock at 樂多Roodo!16:32回應(3)引用(0)

2008年01月16日

使用 CodeIgniter 作為開發框架並預期以 GPL 散佈應用軟體的作法

Tags: php CodeIgniter gpl

CodeIgniter 使用自定的授權書, CodeIgniter License Agreement。基於授權內容, CodeIgniter 不能被 GPL 傳染 copyleft 特性。(因為 GPL 的授權方式使其他使用 GPL 源碼的軟體也必須採 GPL 散佈,故人們戲稱這是一種病毒傳染行為)。基於此種限制,我個人認為不能將 CodeIgniter 包裝為我們應用軟體的一部份。CodeIgniter 和我們的應用軟體應該分開散佈。亦即,使用者必須另外下載取得 CodeIgniter 源碼。

故我寫下這份記錄,以說明如何將採用 GPL 授權書的源碼與 CodeIgniter 的源碼隔離散佈。

有些人認為不必如此做。 CodeIgniter 的作者就認為沒有問題。不過我還是傾向於將兩者分開散佈,不將 CodeIgniter 包裝在一起。

...繼續閱讀

Posted by shirock at 樂多Roodo!17:32回應(0)引用(0)

2008年01月10日

TWPUG - cakephp換頁效能與架構回應之二

Tags: php5 spl sql cakephp 記憶體管理

於 TWPUG 之回應內容,點擊連結參閱: 原文章串之回應內容

本文內容主要討論 PHP 資料查詢函數的記憶體管理機制。

FIEND:

如果 我的 db 有 一千萬筆資料 我全部都要入 變數 再 count ... 應該會 error ....

1. count 陣列變數太誇張了..
我在 db 而且 findall 我己經下 limit 了說
塞入 變數 的想法 真的很酷 不敢用會被打死 .

FIEND 不了解查詢結果的記憶體管理機制。當 PHP 向 DB 查詢資料後,資料內容就已經被儲存在 PHP 這方的記憶體內容了。說的更明白些,例如: $resource = mysql_query($query);。此時 $resource 已經是一個儲存了查詢結果的變數(但型態不是陣列)。如果查詢結果有一千萬筆資料,那麼 $resource 就會配置那麼多的記憶體空間儲存那一千萬筆資料。接著再使用 mysql_fetch_array() 等方法取出個別資料記錄。

...繼續閱讀

Posted by shirock at 樂多Roodo!12:15回應(10)引用(0)

2008年01月7日

TWPUG - cakephp換頁效能與架構

本文起於 FIEND 於 TWPUG 上發表之《小弟寫的 cakephp 換頁 排序 功能》。

FIEND 寫道: 而 CAKEPHP 的架構 是很漂亮的 畢竟也是抄 ruby 的架構 . 雖然只做到三層式架構 將 : 資料邏輯層 和 頁面邏輯層 清礎的切開運用 .

這說法挺奇怪的,基本上 "三層式" 只是概念性的說法,以有別於主從式架構明顯的二層結構,並不是 "只有三層"。所以後來更常見的說法是 n-Tier 或 "分散式架構"。"層數"並不是愈多愈好,因此它"雖然"只有三層,並不表示它做的比較差。

還有一點,三層式並不等於 MVC ,雖然同樣是分三塊。

...繼續閱讀

Posted by shirock at 樂多Roodo!16:19回應(0)引用(0)

2007年08月3日

PHP 可用命名慣例避免名稱衝突

Tags: php5 namespace name_convention coding_standard

PHP5 目前不提供名稱空間(Namespace)功能,但普遍藉由命名慣例 (Name convention) 避免名稱衝突。名稱空間是語法功能;命名慣例則是編程技巧或準則(coding standard)。最常用的慣例是,把你的名號、公司名號或專案名號加在類別名稱前。例如 john 寫了一套 DB 層,那麼類別名稱當為 John_Db ;Xos 專案有一套 DB 層,那麼類別名稱當為 Xos_Db 。甚至於,要學 Java 以 domain name 為命名慣例 (Java 把這套命名慣例應用於 package) 也無不可,例如把類別名稱取作 Tw_Com_ABC_Db 。

在實際撰寫程式碼時,用命名空間和命名慣例的效果是差不多的。如下所示:

$o = new John::Db; //namespace:

$o = new John_Db; //name convention:

名稱空間只得一項好處,就是可以用關鍵字(using or import) 宣告預設名稱空間,讓程序員少打一些字。然而,即便語法支援名稱空間,老練的程序員仍然會採用上述的命名慣例為名稱空間命名,以避免名稱空間的名稱衝突(真拗口...)。


Posted by shirock at 樂多Roodo!2:59回應(0)引用(0)

2007年07月19日

TWPUG問答 - PHP5 個體指派動作的陷阱

Tags: php reference object

前幾天在 TWPUG 上,有位網友提了一個問題。大意是如何以一個個體為正本,透過指派動作複製多次到陣列中,每個陣列元素的內容應該不相同。我看出他碰到了一個語言陷阱,我也回答了。可惜,我當時的答案是錯的... 我重新思索了一下,本文才是正解。

在 PHP5 之後,個體(object)的指派動作皆是使用參照。換言之,當指派來源的資料型態是object時, PHP5 就會用參照;故 $a = $o 的動作實際上等於 $a =&$o

...繼續閱讀

Posted by shirock at 樂多Roodo!22:23回應(7)引用(0)

2007年07月16日

foreach 時使用 reference 的陷阱

Tags: php foreach reference

前幾天在重構一段 PHP 程式碼時,不小心踩到 foreach 使用「參照(reference)」的陷阱。上網查了一下,似乎踩到的人還不少。我想了一下,把原因換成另一段程式碼形式說明,再說明解法。基本上,這是個 trick ,而不是 bug 。

...繼續閱讀

Posted by shirock at 樂多Roodo!16:44回應(1)引用(0)
 [第一頁]  [1]  [2]  [3]  [4]  [5]  [6]  [7]  [8]  [最終頁]