2011年8月12日 星期五

php 單例設計模式

單例設計模式 今天在網路上看到的一個名詞 說穿了它就是例用static這個關鍵字 其實static早就php4就已經存在了 但很少看到討論它的功能 再順便討論一下吧 ```php function test() { static $a; if ($a == FALSE) { $a = 1; } else { $a++; } echo $a; } test(); //輸出 1 test(); //輸出 2 test(); //輸出 3 test(); //輸出 4 /* 所以當你指定了變數為static時 它就不會因為function執行結束後而將變數回收 所以我們這個例用這個方法來實現單例設計模式 */ class Test { function instance() { static $instance; if ($instance == FALSE) { $instance = new Test(); } return $instance; } } $test =& Test::instance(); $test2 =& Test::instance(); $test3 =& Test::instance(); /* 這樣$test,$test2,$test3都會指向同一個物件 以上為PHP4的寫法 PHP4必須帶參考才能將物件指到同一下 那php5怎麼寫呢? */ class Test { static private $instance; static public function instance() { if (self::$instance == FALSE) { self::$instance = new self; } return self::$instance; } } $test = Test::instance(); /* PHP5的CLASS支援這種寫法當然要用這種寫法了啊! 雖然採用PHP4的寫法也行.... 但新的東西總是要用一下的是不是 */ ```

2011年8月10日 星期三

FB.api究竟要如何使用?

在使用FB的javascript寫應用程式不外乎最常用到的就是FB.api 但查到的文件不外乎都只是用來做資訊查詢... ex. ```javascript FB.api({ method:'fql.query', query:'SELECT uid,first_name,last_name FROM user WHERE is_app_user = 1 AND (uid IN (SELECT uid2 FROM friend WHERE uid1 = me())) ' },function(){ console.info(arguments); }); // 或者是用Graph API來做資訊查詢 ex. FB.api(object_id+"/likes",function(){ console.info(arguments); }); // 但事實上FB.api真正的功能並不只如此 ex. //讚 FB.api(object_id+"/likes","post",function(){ console.info(arguments); }); //取消讚 FB.api(object_id+"/likes","delete"); //publish feed 至 https://graph.facebook.com/arjun/feed FB.api("arjun/feed",{message:'hello'},"post",function(){ console.info(arguments); }); ``` 帶入參數的個數和型態FB.api會自動去判断 善用這些東西很多事情就不用都透過php sdk來執行可以大量減少Server的負擔喔