2008年07月22日
[PHP] PHP 5.3 的 Lambda 和 closure ?
這篇也 Lag....這是前陣子的消息。
PHP 5.3 將有可能會有 Lambda (黏巴達?) 和 closure ,來源為 Request for Comments: Lambda functions and closures 這篇文章,所以以後 call_user_func 就不必再用蹩腳的字串來做為函式內容了。而且這是不是也表示 PHP 不但向 Java 靠攏,也開始向 JavaScript 靠攏了?
註:所以 Mark 剛剛跟我說 PHP 快變四不像了。
Lambda 語法如下:
function & (parameters) use (lexical vars) { body }
範例:
$lambda = function () { echo "Hello World!\n"; };
可以這樣用:
$lambda ();
call_user_func($lambda);
call_user_func_array($lambda, array());
所以 call_user_func 系列函式就可以用 Lambda 了。
進階的 Lambda 範例:
function replace_spaces ($text) {
$replacement = function ($matches) {
return str_replace ($matches[1], ' ', ' ').' ';
};
return preg_replace_callback ('/( +) /', $replacement, $text);
}
Closure 語法:
function (normal parameters) use ($var1, $var2, &$refvar) {}
範例:
function replace_in_array ($search, $replacement, $array) {
$map = function ($text) use ($search, $replacement) {
if (strpos ($text, $search) > 50) {
return str_replace($search, $replacement, $text);
} else {
return $text;
}
};
return array_map($map, $array);
}
可以看到原來可以用 callback 的函式,應該都能接受 closure 。
其他就請參考來源文章囉。
相關文章
[Web] 連結分享
又 Lag 了好久...真希望趕快把工作做完,可以好好打個電動。
PHP
- How I PHP: Using defaults for input arguments
- Migrating OOP Libraries and Frameworks to PHP 5.3
- pChart - PHP Charting Library under GPL License
- PHP framework comparison benchmarks
- php建立多级目录的函数
- PHP —— 为什么不要在 foreach 中使用变量引用
- Smarter Auto-Linking
- ActiveRecord does not suck
- SQLite/PHP/Apache 設定筆記
- Handling Images with PHP
- Fluent Arrays and Strings in PHP - Adding JSON and more
- The Advancing PHP Developer Part 5: Design Patterns
- PHP 168 SQL注射漏洞
- Top 5 PHP replacements for Apache default directory listing
- Generating PDF Forms From a Flex Application With PHP
Zend Framework
- Testing Zend Framework MVC Applications
- Zend_Cache is Saving me Money!
- Autogenerating forms from Doctrine models
- Simplifying zend_view_helper_url
- Zend_Acl and MVC Integration Part II (Advanced Use)
- Zend Framework 1.6 RC1 Released
JavaScript
- JavaScriptMVC
- Javascript-to-PHP Remoting
- JavaScript Object Basic
- eval() Kerfuffle
- qUIpt:一個很有創意的 JavaScript Cache Library
- JavaScript是怎樣讓互聯網變慢的
- Dynamic Layout
- js 控制 iframe 內容(FF/IE)
- DOM DocumentFragments
jQuery
- jQuery Tracking The Position Of The User's Mouse
- jQuery Plugins, Size, and Storage
- Designing Your Page Around a jQuery UI Theme
- jQuery LiveSearch
- jQuery Treeview with MODx Wayfinder
- Cleanup your html with JQuery
- jQuery.UI ProgressBar Widget
- 51+ Best of jQuery Tutorials and Examples
- jQuery Sparklines
- Garage Door Style Menu (using Animated Background Images with jQuery)
- jQuery plugins: Five tips for separating the good from the bad and the ugly
CSS
- Web 前端优化最佳实践之 CSS 篇
- Build an American Flag out of XHTML and CSS
- CSS-Styled Lists: 20+ Demos, Tutorials and Best Practices
- Top 10 CSS buttons tutorial list
- Dynamic Layout: Dynamic Holy Grail Demo
- Fix Your CSS
- Pure CSS opacity and how to have opaque children
- 斜角滑动门导航条(DIV+CSS)
- 曹鹏 CSS 视频教程
- 元素层叠级别及z-index剖析
- Creating CSS Layouts: The Best Tutorials on Converting PSD to XHTML
Database
MySQL
- Resyncing table on MySQL Slave
- 混合使用SQL和shell命令
- ORDER BY RAND()
- MySQL 的 ORDER BY RAND() 的替代方案
- MYSQL索引实例
- 用mysql触发器自动更新memcache
- MySQL 快速為線上運作的 Master 增加 SLAVE(設定 Replication)
- MySQL 5.1 is to reach GA state
Oracle
Browser
- Using jQuery in Greasemonkey
- 【FireNes】用Firefox玩超級瑪莉、1942、魂斗羅…等2000多個任天堂遊戲!
- Rainbow for Firebug :: Firefox Add-ons
- 4個 Firebug 的必備元件
Design
- 7 Useful Web Design Tips
- 27 Best Photoshop Web Layout Design Tutorials to Design Decent Web Layouts
- PNG Icons & Icon Packs Download
Game
Programming
SCM
Service
Software
- 遠端桌面連線程式 Terminals
- 重組被鎖定的系統檔案不再是麻煩事:System File Defragmenter
- 解決由 AppLocale 引起的 MSI 安裝程式亂碼問題
- Java Runtime Environment (JRE) 專用的安裝、升級輔助器:JavaRa
- 搜尋登錄檔的超級利器:RegScanner
- 介紹好用工具:IObit SmartDefrag 磁碟重組工具
System
- 在 Win32 安裝 Apache 2.2 with OpenSSL + Subversion 1.5
- The Perfect Server - CentOS 5.2
- Ubuntu 很忙 : 解決 8.04 LTS 安裝時掉進 BusyBox 的問題
Web Development
- 使用 ApacheBench 進行網站的壓力測試
- Powering a Web Revolution
- 用 GAEO 加快開發 Google App Engine 的程式吧!
- Apache-MySQL Tuning tips -From My Experience
- 10 Best Free Chart APIs
- 有特定格式的 JPEG 圖檔無法在 IE 瀏覽器中顯示
- Another PNG Fix for Transparent PNGs in IE 6
- Why People Still Use IE 6
- Maps API, GTileLayer
- 在敝社的訓練所當講師
- Useful tips to enrich your HTML Forms
- Opening a new browser window with POST data
- Conditional Comments for HTML Email
- HTTP Status: Redirection
- Web Forms 2.0
2008年07月3日
[心得] 給程式開發人員的一些想法
- 程式框架會因為需求導向的不同而有所改變。
- 在不良管理下工作,程式員不會覺得他的工作有價值。
- 程式員需要不受干擾的環境,否則他的生產力將大打折扣。
- 人不是 CPU ,通常只能專注一件事,因為人在轉換 Process 上的代價是很大的。
- 正視並善用你手邊的工具,不要
一昧一味地追求新技術。 - 不要因為新技術為你帶來好處,而忽略它也可能同時為別人帶來壞處。
2008年06月30日
[PHP] PHP 5.3 的新特色: Phar
註:以下程式我並沒有實作過,只是先分享一下給大家。
PHP 5.3 帶來很多有趣的特色,其中一個就是可以把你的 Library 打包成 phar 格式,並透過 require 敘述來引用裡面的程式碼。
首先你可以用 PHP 5.3 的新類別 Phar 來打包你想要的程式碼 (通常是類別檔案) :
<?php
$phar = new Phar('My.phar', 0, 'My.phar'); // 建立 My.phar 檔案
$phar->buildFromDirectory(
dirname(__FILE__) . '/My', '/\.php$/'
); // 打包所有 My 目錄下的 php 檔案
$phar->compressFiles( Phar::GZ ); // 以 GZ 格式壓縮
$phar->stopBuffering(); // 壓縮完成,寫入 phar 檔
然後你可以整包引入:
require 'My.phar';
也可以單獨引入其中的某支檔案:
require 'phar://My.phar/src/Test.php';
就連 PHPUnit 3.3 也試用 Phar 來打包囉了!
那麼效能呢?據 Jan Schneider 的消息指出, PHP 的開發團隊已經把這個功能的效能調整到接近 native PHP 的執行進度了!
很酷吧?期待 PHP 5.3 的來臨吧!
參考
2008年06月28日
[Web] 連結分享
PHP
- A Service Locator for PHP5
- Hierarchical caching
- Fluent Arrays and Strings in PHP
- PHP - Caching Pages with Output Buffering
- An introduction to friendly URLs in PHP
- Maximizing Your MySQL Database
- Three Quick Tips To Make Your PHP Understandable
- 創建自己的PEAR頻道
- Friday afternoon toying: eZ Components as phar
- Phar
Zend Framework
CSS
Database
Oracle
JavaScript
- Cross-browser image rotation with JavaScript and CSS
- window.open() Syntax Generator
- 23+ Impressive Tools for Faster Javascript/Ajax Development
jQuery
- Advanced Image Enlargement With jQuery
- Create a multilevel Dropdown menu with CSS and improve it via jQuery
- jsTree: jQuery-based JavaScript tree component
- Input focus with jQuery
- Chapter 1 - jQuery 101
- Build Your Own Social Home!
- jQuery 相關連結
- jQuery - Five Questions And Answers
- mcDropdown jQuery Plug-in
Web Development
- Handy Designer's Tools "On The Fly"
- 完美解決網頁文字太長而導致破版的問題
- 使用 .htaccess 自訂 “404 找不到網頁” 的頁面
- Color Contrast Spectrum Tester, by Joseph C Dolson
- 色彩對比分析
- CSS support in HTML emails of Hotmail, Yahoo! Mail and Gmail
Browser
Design
Project
Service
Software
2008年06月23日
[PHP-ZF] 解決 ZF 在 Proxy 模式下無法正確解析 Controller Name 的問題
說明
因為要和客戶的內部網路連線,便透過 PieTTY 的 SSH Tunnels 模式來做 Proxy 。 但是這個方式卻讓 Zend Framework 出現了以下的錯誤訊息:
An error occurred with this request: Invalid controller specified (http:).
解決方式是修改 Zend Framework 的 Zend_Controller_Request_Http 這個類別。
先開啟 Zend/Controller/Request/Http.php ,並找到:
$requestUri = $_SERVER['REQUEST_URI'];
改為:
$requestUri = preg_replace(
'/^https?:\/\/' . $_SERVER['HTTP_HOST'] . '/i',
'',
$_SERVER['REQUEST_URI']
);
這樣就能避掉 Proxy 所帶來的問題了。
註 1 :這個方法的風險在於會修改原生的 ZF 程式碼,如果會用到 Subversion 來管理程式碼的話,要特別注意未來更新版本時可能會發生衝突的問題。
註 2 :未來版本應該會修正這個問題。
參考
ZF MVC is not compatible with apache + http protocol proxy requests

