2007年07月31日

[PHP] 連結分享

最近太忙,記幾個 PHP 相關連結先:


Posted by jaceju at 11:00回應(2)連結分享

2007年07月26日

[PHP-ZF] 測試 ZF 的 MVC 架構

Zend Framework 的 MVC 架構怎麼做單元測試呢?高手 Alex 來告訴你:

Automatic testing of MVC applications created with Zend Framework

註:這篇是今年三月的文章,所以實作的時候 ZF 及 PHPUnit 可能要依照目前的版本做一些調整。


Posted by jaceju at 15:33回應(12)Zend Framework

[SQL] PHP MySQL Tips

Spanner 看到一篇 MySQL 語法的效能比較,記下來先:

PHP Mysql tips

Continuing from my earlier post on PHP performance, I thought I’d share a few Mysql tips that I’ve learnt over the years. Hope it helps someone and please leave a comment with your own tips or provide any corrections to the ones mentioned.

Word searching

1.

SELECT * FROM TABLE WHERE MATCH (`field`) AGAINST ('Keyword')

(Fastest)

2.

SELECT * FROM TABLE WHERE MATCH (`field`) AGAINST ('+Keyword' IN BOOLEAN MODE)

(Fast)

3.

SELECT * FROM TABLE WHERE RLIKE '(^| +)Keyword($| +)'

OR

SELECT * FROM TABLE WHERE
RLIKE '([[:space:]]|[[:<:]])Keyword([[:space:]]|[[:>:]])'

(Slow)

Contains searching

1.

SELECT * FROM TABLE WHERE MATCH (`field`) AGAINST ('Keyword*' IN BOOLEAN MODE)

(Fastest)

2.

SELECT * FROM TABLE WHERE FIELD LIKE 'Keyword%'

(Fast)

3.

SELECT * FROM TABLE WHERE MATCH (`field`) AGAINST ('*Keyword*' IN BOOLEAN MODE)

(Slow)

4.

SELECT * FROM TABLE WHERE FIELD LIKE '%Keyword%'

(Slow)

Recordsets

1.

SELECT SQL_CALC_FOUND_ROWS * FROM TABLE WHERE Condition LIMIT 0, 10

SELECT FOUND_ROWS()

(Fastest)

2.

SELECT * FROM TABLE WHERE Condition LIMIT 0, 10

SELECT COUNT(PrimaryKey) FROM TABLE WHERE Condition

(Fast)

3.

$result = mysql_query("SELECT * FROM table", $link);
$num_rows = mysql_num_rows($result);

(Very slow)

Joins

Use an INNER JOIN when you want the joining table to only have matching records that you specify in the join. Use LEFT JOIN when it doesn’t matter if the records contain matching records or not.

SELECT * FROM products
INNER JOIN suppliers ON suppliers.SupplierID = products.SupplierID

Returns all products with a matching supplier.

SELECT * FROM products
LEFT JOIN suppliers ON suppliers.SupplierID = products.SupplierID

WHERE suppliers.SupplierID IS NULL

Returns all products without a matching supplier.

Best practice

1. Always use lowercase for table names. (If you use different OS’s this is a must)
2. Always prepend the table name to the field. E.g. ProductName, SupplierPostCode.
This makes multiple joins very easy.
3. Always create a primary id field with the name of the table followed by the id. e.g. ProductID
4. Index fields used for joins.
5. Use a separate logging table or transactions for logs of table updates, deletes etc.


Posted by jaceju at 10:16回應(1)資料庫

[PHP] Namespace in PHP5 Come Back!!

不用等 PHP6 了, Frank Kleine 說 PHP 5.3 就會把 Namespace 帶回來了。原文如下:

Today I saw PHP namespaces in action. Timm Friebe, who backported the namespace patch to PHP5, showed me a namespaced version of the XP-Framework. This was very impressive! We experimented a bit with __autoload() and it was very nice to see that the function is not called on the import but actually when the class is used within the code. Additionally we played around with full and non qualified classnames, with and without the import statement. What I saw looks really promising. Keep your fingers crossed that we will get a PHP5.3 with namespaces!


Posted by jaceju at 10:03回應(0) PHP

2007年07月18日

[Web] 連結分享

Scope in JavaScript

第一篇是有關 JavaScript 作用域的說明,把 JavaScript 各變數的作用範圍講解的非常清楚。裡面也包含了 apply 及 call 兩個方法的解說,非常值得一讀。

Realazy 將它翻譯成了簡體中文版,有興趣的朋友不妨參考看看。

Why you should right align form labels?

第二篇說明為什麼我們需要將表單標籤靠右,前半段豐富的圖解說明,頗有「操作介面設計模式」一書的味道。最特別的是作者還利用數學公式來講解一些視覺編排上的差異 (雖然我有看沒有懂) ,令人覺得非常有趣。

題外話

也許有些人會覺得上面的兩篇文章,一篇是關於 JavaScript 技術、一篇是關於 HTML 介面,兩者之間並沒有太大的關連。不過有經驗的朋友應該能想到,會結合到 JavaScript 及 HTML ,大概就是傳統的 DHTML 及 Ajax 兩種技術了。不過我的重點其實不在文章的內容或是應用了什麼技術,而是要讓自己思考使用者到底是怎麼看待所謂的專業。

由於最近終於把某個時程非常趕的專案弄上線了,雖然有些急促,但是因為有現成工具的幫忙,使得我們在開發上變得較為輕鬆。

雖然我沒有在這個專案裡大量使用 Ajax ,不過在一些小地方的 Ajax 應用著實讓我覺得方便許多。也因為如此,讓我體會到了 JavaScript 的深奧及使用者介面的重要性。

舉個例子,我在後台製作了一個圖片上傳的小元件,當使用者點選圖片時 (這時候顯示的是預設的待上傳) 就會跳出一個上傳視窗;在這個視窗中,使用者可以透過一般的上傳欄位選擇圖片並直接上傳,而上傳後就會直接將原來預設的圖片換成上傳的圖片。而在相同的視窗裡,也可以同時刪除原來上傳的檔案。

也許這對各位高手來說不是什麼了不得的技術,但是對這個專案的使用者而言,他們認為這樣的操作非常方便。也就是說,我們的專業並不是取決於用了什麼高深的技巧,而是是否貼近使用者的直覺或者他的操作習慣。

比起網路上眾多的高手,其實我在這方面的研究算是初淺了。不過我還是希望我所學習的任何技術能有派上用場的時候,更希望開發出來的程式能夠被使用者感到方便而顯露出它的價值。


Posted by jaceju at 10:41回應(6)連結分享

2007年07月13日

PHP4 的盡頭

PHP 官方宣佈停止對 PHP4 的支援了,原文如下:

PHP 4 end of life announcement

[13-Jul-2007]

Today it is exactly three years ago since PHP 5 has been released. In those three years it has seen many improvements over PHP 4. PHP 5 is fast, stable & production-ready and as PHP 6 is on the way, PHP 4 will be discontinued.

The PHP development team hereby announces that support for PHP 4 will continue until the end of this year only. After 2007-12-31 there will be no more releases of PHP 4.4. We will continue to make critical security fixes available on a case-by-case basis until 2008-08-08. Please use the rest of this year to make your application suitable to run on PHP 5.

For documentation on migration for PHP 4 to PHP 5, we would like to point you to our migration guide. There is additional information available in the PHP 5.0 to PHP 5.1 and PHP 5.1 to PHP 5.2 migration guides as well.

對某些人來說大概是壞消息,但對我而言卻是很棒的新聞。

PHP 終於醒了...


Posted by jaceju at 18:41回應(0) PHP

2007年07月8日

邁向 PHP5

GoPHP5

先前我在「 PHP5 將滿 4 歲」提到許多虛擬主機商不敢升級到 PHP5 ;針對這個問題,前幾天,幾個國外知名開源 PHP 軟體公開推動了 GoPHP5 這個計畫。

以下轉錄對岸網友 lnxcym 提供的翻譯內容

[转]多家PHP开源项目联手推动PHP5普及

2007年7月5日消息,一个PHP开发者联盟近日宣布,几家著名的开源PHP项目将在2008年2月5日以后推出的新版软件中,它们将放弃对老版本PHP的支持,以联手推动PHP开发者社区完全向PHP 5迁移。

  包括Symfony、Typo3、phpMyAdmin、Drupal、Propel和Doctrine等在内的开源项目已经都宣布,在2008年2月5日以后发布的新版将要求PHP 5.2版本,以作为对GoPHP5.org支持的一部分,另外,它们还向其他任何PHP项目和应用程序发出了邀请,来共同推动PHP5的普及,不管是开源软件还是专有软件。

  目前大多数基于PHP的Web应用程序即可以运行在PHP4下,又可以运行在PHP5下。PHP 4在2000年发布,并迅速成为主流Web开发语言之一。版本5是在2004年发布,具有很多功能上的改进,但是由于种种原因,被采用的速度却非常慢。

  Drupal的开发者兼GoPHP5.org的创始人之一Larry Garfield表示,“和我交流过的大多数PHP开发者都想使用PHP 5,但是由于许多Web主机只默认提供对PHP 4的支持,因此实际上并没有使用。而Web主机不会升级是因为项目没有升级,而项目之所以不升级是因为Web主机没有升级。这使得许多项目在放弃对PHP4的支持的时候感到为难,因此,我们计划从自身做起,为推动PHP5的普及而努力。”

  通过预先宣布计划在2008年的软件版本中要求PHP 5.2,GoPHP5希望借此来推动Web主机开始升级他们的服务器到更新、更稳定和功能更丰富的PHP版本,并且让它们有充分的时间来完成这个工作。同时,那些使用相关项目的现在版本的用户也不会被冷落。所有相关项目将继续支持现有建立在PHP4上的版本,以保持他们的正常生活秩序,给用户和运营商时间来计划和实施升级。

  phpMyAdmin的项目领导Marc Delisle补充说,“phpMyAdmin项目对加入GoPHP5活动非常热情,我们将GoPHP5看作完善我们产品的新版本的方式,不用不得不投入精力保持其PHP4兼容性,另外还可以改善我们用户的体验。”

  PHP 5为开发者提供了大量的新功能,来帮助开发者更快速的开发现在的Web应用程序,其中包括大大提高的Web服务的XML处理能力,一个被叫做SQLLite的完整SQL数据库,更好的对时区处理,令人印象深刻的完善的安全工具,更强大的面向对象功能,等等。许多PHP项目已经要求使用PHP 5。通过推广PHP 5的安装范围的行动,也将扩大这些项目的市场范围。

  PHP是一个广泛应用的通用脚本语言,尤其适合于Web开发。PHP是当前领先的Web开发语言之一,可以运行在第三方Web服务器上,目前被包括从Yahoo到Facebook在内的众多知名IT网站所选用。

更多信息,请访问以下网站:

http://gophp5.org/
http://www.phpmyadmin.net/home_page/gophp5.php
http://drupal.org/gophp5

我個人也希望能藉由這樣的計畫,推動更多 PHP 開發者朝向 PHP5 前進;尤其目前 Zend Framework 的釋出,也讓我對 PHP5 的未來更加看好。


Posted by jaceju at 17:41回應(3) PHP

2007年07月6日

Namespaces in PHP6 逆襲!

原本 PHP5 在 beta 版時有實作 Namespaces 的概念,但是因為某些因素而使得在正式推出時拿掉了。

昨天 Dmitry Stogov 又把 Namespaces 的想法帶回 PHP 了,整理一下相關的連結:

基本上我個人覺得還不錯,不過工作忙加上資歷不深,沒有什麼高明的見解,所以詳細的討論就留給各位高手們發表了。


Posted by jaceju at 10:23回應(1) PHP

2007年07月5日

Zend Framework 手冊 CHM 版

一直以來覺得 Zend Framework 沒有 CHM 格式的手冊很不方便,沒想到對岸的朋友 mikespook 已經做好了。

請參考:编译了 CHM 的 Zend Framework 手册

至於如果有新的版本出來時要更新怎麼辦?也很簡單,照以下步驟自行製作即可:

註:詳細過程我就不多做說明了,各位聰明的朋友應該能夠自己舉一反三。

  1. 下載 Html Help Workshop 並安裝。

  2. 用 Html Help Workshop 解開 (Decompile) mikespook 製作的 zf-en-mikespook.chm 。

  3. 這時候在解開的目錄裡會有一個 toc.hhc ,這個就是我們要的目錄結構了。

  4. 重新用 Html Help Workshop 建立一個新專案 (假設檔名為 zhchm.hhp ) ,把 toc.hhc 載入。

  5. 把英文版的 Zend Framework 官方 HTML 手冊下載回來解開,假設我們解到了 C:\Temp\zfmanual 下。

  6. 把剛剛的 zfchm.hhp 和 toc.hhc 複製到 C:\Temp\zfmanual\documentation\manual\core\en 。

  7. 最後以 Html Help Workshop 開啟 zfchm.hhp 並編譯之,這樣就會在同一個目錄下得到 zfchm.chm 。

大功告成,特此感謝 mikespook 。


Posted by jaceju at 10:37回應(0)Zend Framework

2007年07月2日

PHPUnit 3.1.0 釋出

這個月 (2007/07) 好像大家都說好了,我所關注的幾個專案都釋出了新版本。剛剛 PHPUnit釋出了 3.1.0 版,主要特色如下:

  • Improvements to Mock Objects include the ability to mock classes and methods that do not exist as well as mocking static methods. And mocked methods can raise exceptions now.

  • PHPUnit's Selenium RC extension no longer uses the Testing_Selenium PEAR package but its own implementation of the Selenium RC client/server protocol. Among other benefits, this allows for the collection of code coverage data for Selenium tests.

  • PHPUnit can now write test result and code coverage data to a test database. Several ideas for future features depend on this data.

  • New template methods, PHPUnit_Framework_TestCase::sharedAssertions(), PHPUnit_Framework_TestSuite::setUp(), PHPUnit_Framework_TestSuite::tearDown(), and PHPUnit_Extensions_SeleniumTestCase::defaultAssertions(), ease the development of test cases.

  • PHPUnit_Framework_TestCase::assertEquals() can now operate on DOMDocument objects.

  • And lots of smaller improvements all over the place.

沒空翻譯了...請各位朋友自行參考 Changelog

時間越來越少,要學的東西越來越多....Orz


Posted by jaceju at 21:02回應(0) PHP
 [1]  [2]  [最終頁]