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 。

其他就請參考來源文章囉。

相關文章


Posted by jaceju at 樂多Roodo!17:41回應(3) PHP

[Web] 連結分享

又 Lag 了好久...真希望趕快把工作做完,可以好好打個電動。

PHP

Zend Framework

JavaScript

jQuery

CSS

Database

MySQL

Oracle

Browser

Design

Game

Programming

SCM

Service

Software

System

Web Development


Posted by jaceju at 樂多Roodo!17:15回應(0)連結分享

2008年07月3日

[心得] 給程式開發人員的一些想法

  • 程式框架會因為需求導向的不同而有所改變。
  • 在不良管理下工作,程式員不會覺得他的工作有價值。
  • 程式員需要不受干擾的環境,否則他的生產力將大打折扣。
  • 人不是 CPU ,通常只能專注一件事,因為人在轉換 Process 上的代價是很大的。
  • 正視並善用你手邊的工具,不要一昧一味地追求新技術。
  • 不要因為新技術為你帶來好處,而忽略它也可能同時為別人帶來壞處。

Posted by jaceju at 樂多Roodo!16:09回應(7)心得感想

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 的來臨吧!

參考


Posted by jaceju at 樂多Roodo!10:08回應(3) PHP

2008年06月28日

[Web] 連結分享

PHP

Zend Framework

CSS

Database

Oracle

JavaScript

jQuery

Web Development

Browser

Design

Project

Service

Software


Posted by jaceju at 樂多Roodo!16:48回應(0)連結分享

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


Posted by jaceju at 樂多Roodo!11:09回應(0)Zend Framework

2008年06月19日

給工程師的第二句話

桌面放正妹,萬事都 OK

正妹


Posted by jaceju at 樂多Roodo!15:13回應(3)心得感想

2008年06月18日

[Web] 連結分享

事情多到忙不完了,這次的分享只能稍作整理,沒有任何評論。

...繼續閱讀

Posted by jaceju at 樂多Roodo!17:07回應(1)連結分享