用 Xdebug 來找出 PHP 程式錯誤

有時候 PHP 在執行到某個錯誤時,只會丟出一行的訊息,告訴你程式發生錯誤。 例如以下的程式:

<?php
function test($var)
{
$var->display();
}
$abc = 123;
test($abc);
?>

執行後會出現以下的錯誤:

Fatal error:  Call to a member function display() on a non-object in D:\WEB\wwwroot\index.php on line 4

我們可以知道在第 4 行的地方因為 test 函式對 $var 呼叫了物件操作函式,卻因為 $var 不是物件而導致錯誤 (Fatal Error) 。但是我們怎麼知道 $var 變數是從那裡來的呢?就上例而言,很明顯地往回推到第 8 行呼叫 test 函式的地方,我們給它的是 $abc 變數,而 $abc 變數存放則是一個數值,也因此造成 test 函式的錯誤。

當然在程式碼比較短時,我們可以很容易知道整個程式執行的流程動向;不過當我們的程式碼暴漲到上百行或是中間引入不同檔案時,要一下子歸納出它的動線就很不容易了。換句話說,如果第 6 行中我們有上百行的程式碼,那麼我們如何一下子就找到 test 函式的引用點呢?

閱讀全文

ASP 物件設計手法 (5) - Me 關鍵字

一直以來我都以為 Me 這個關鍵字只能在 VB 上用,沒想到這兩天我用了 Me 當類別屬性時發生錯誤,這讓我得重新檢視它是不是個 VBScript 的預設關鍵字。

我找過 MSDNScripting ,裡面並沒有提到 Me 這個關鍵字,反而是在 VB 6.0 裡找到這個關鍵字的說明。真是神「 Me 」 呀!它在 VB 中的主要用途一為指向類別自己,二為指向 Form 物件。不過 ASP 中應該是沒有 Form 物件可參考 (這裡我保留這樣的想法,也許將來又發現自己錯了) ,所以對我來說這個關鍵字就是用在 Class 上的。

閱讀全文

ASP 物件設計手法 (4) - 動態載入類別

為了避免類別重覆宣告,我想盡辦法做了一些調整,但都不如已意。後來我回想起自己曾經找過一篇動態載入 ASP 程式的文章,那時因為它無法達到我的需求而放棄,但是現在它卻有新的用法。

閱讀全文

ASP 物件設計手法 (2) - 初級技巧

Design Patterns 是我近來研究的課題之一,我在後來的 ASP 專案裡,為了解決一些問題而導入了部份的 Design Patterns 觀念。或許有人會認為 ASP (VBScript) 沒辦法使用正統的 Design Patterns ,不過我注重的是 Design Patterns 的觀念所帶來的解題方式,而不是 Design Patterns 的形。

以下我會說明一些我常用的技巧,這些都是從 Design Patterns 中得到的一些啟發。

閱讀全文

ASP 物件設計手法 (3) - 進階技巧

接下來的技巧會比較複雜一點,不過如果能夠善用的話,就會是一項很好用的武器。我在較大型的專案裡用過這樣的方式,它提供了我在開發程式不一樣的角度。至少我不必再寫一些複雜的判斷式,減少錯誤的發生。當然錯誤還是會有,但這是個人思考邏輯的問題,和物件導向開發方式關係不大。

閱讀全文

ASP 物件設計手法 (1) - 基礎

這是寫給公司同事的一系列 ASP (VBScript) 物件設計手法文章,我盡可能寫得比較簡單易懂。雖然 ASP 目前已經不再是市場主流,但還是我的手邊有很多專案沒有辦法導入比較先進的技術 (像 ASP.NET 或 JSP 等) 。所以瞭解如何用 ASP 的物件設計手法來解決問題,是這系列文章主要的目的。

在繼續下去之前,首先先釐清一個觀念,物件導向是一種思維,而非僅是語言的特性。當然,我也不想去仔細探討 ASP (VBScript) 是不是物件導向語言。我已經用這種方式寫了一些專案,執行成果也還不錯。對於那些有疑問的朋友,我還能夠拿出一點不算太難看的成果供他們參考。

經過了一些討論與思考,我決定把這系列文章更名為「ASP 物件設計手法」。

對於物件導向我不是高手,我也還在研究當中。我只是希望透過這樣的說明,讓我身邊的伙伴能夠清楚我的想法 (與寫法) 而已。

閱讀全文

PHP 5.1.0 正式發表

嗯,有空要好好研究一下。當然最大重點就是 PDO (預設啟用) 了!

參考網址:

閱讀全文

撰寫可以接受 callback 虛擬型態參數的函式

前面介紹過 callback 虛擬型態,但不限於 PHP 內建函式,我們也可以在函式中自行處理 callback 虛擬型態的參數。

閱讀全文

PHP 的 callback 虛擬型態

PHP 提供了一種很有趣的虛擬型態 (Pseudo-type) : callback ,它其實是字串或陣列組成。主要用來處理一些有不容易寫死在程式裡的函式名稱。

閱讀全文

Smarty 入門

這是我一年前寫的文章,之前寄放在朋友的站:[PHP 5知識交換中心]

不過因為有針對舊有的內容做一些小調整,所以這次把它放回到自己的 Blog 裡。

閱讀全文