西元年轉民國年,還要再處理日期的加減
光用php的date函數或是mktime是一件很麻煩的事情
所幸php內建了DataTime這個class來協助處理這件事情
```php
// 西元年轉民國年,並取得5天後的日期
$date = new DateTime("now");
$date->modify("+5 day");
$date->modify("-1911 year")
// 由於Y為四位數,所以利用ltrim去0
echo ltrim($date->format("Y-m-d H:i:s"),"0");
// 民國年轉西元年,並取得10天前的日期
$date = new DateTime("101-01-01");
$date->modify("+5 day");
$date->modify("+1911 year")
echo $date->format("Y-m-d H:i:s");
```
2013年6月2日 星期日
2013年2月5日 星期二
tempnam修改
有時候在寫程式的時候會用到暫存檔
一般我們可能都是用PHP內建的tempnam來建立暫存檔
但有時候用到某些library時,
會去認檔案的副檔名,但內建的tempnam所產出的暫存檔副檔名皆為 .tmp
所以就自己另外寫了一個程式來替代暫存檔的產生
```php
class File
{
public static function tempnam($dir = NULL,$suffix = "tmp"){
$name = strtoupper($suffix)."_".md5(time().mt_rand());
if (empty($dir) == TRUE){
$dir = sys_get_temp_dir();
}
$file = $dir.'/'.$name.".".$suffix;
$handle = fopen($file, "w");
fclose($handle);
if (realpath($file) == TRUE)
{
register_shutdown_function(create_function("", 'if (realpath("'.$file.'") == TRUE){unlink("'.$file.'");}'));
// register_shutdown_function(array("File", 'rmtempnam'),$file);
return $file;
}
throw new Exception();
}
} // End file
echo File::tempnam(NULL,"png");
// print xxxxxxx.png
```
2011年11月24日 星期四
php string 轉 boolean (php_filter)
PHP它是一個weak type的程式語言
所以只要字串有值,拿去做if判斷時,就一定會回傳true
但有時候會希望帶進來的參數為字串 "false" 時希望它的boolean為 false
在php5以前的版本可能只能這樣寫
```php
$bool = 'false';
$result = NULL;
if ($bool == 'false' OR !$bool){
$result = FALSE;
}
var_dump($result);
```
不過php5之後的版本可以換一個方式寫了
```php
$bool = filter_var($_GET['bool'], FILTER_VALIDATE_BOOLEAN);
```
這樣$_GET['bool']帶進來的值為 'false','no','null','0' 都會被轉為 FALSE
這個函式就像是JAVA的
```javascript
Boolean.parseBoolean(strBoolean);
```
如果要寫一些比較嚴謹的PHP程式用這個函式可能是比較好的作法...
PS. filter_var這個函式不只可以字串轉boolean、也可以驗證email、ip、url等等....
有興趣的話就上PHP官網查一查吧
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的負擔喔
2011年1月14日 星期五
php date日期加減
寫了那麼久的php我到今天才發現原來日期的增減這麼簡單!
看到之前自己寫的函式才發現自己真的很蠢!哈
```php
$currentDate = date("Y-m-d");// current date
echo "Current Date: ".$currentDate;
$date30DaysAdded = date('Y-m-d', strtotime("+30 days"));
echo "30 Days added: ".$date30DaysAdded;
$date10YearsBack = date('Y-m-d', strtotime("-10 years"));
echo "10 Years back: ".$date10YearsBack;
$date2DaysAdded = date('Y-m-d', strtotime("+2 days"));
echo "2 Days Added: ".$date2DaysAdded;
```
標籤:
php
2010年12月12日 星期日
php5 json_decode回傳array
在php5內的json_decode的第二個參數決定回傳值為std class或array
```php
$json = json_encode(['a' => 'b']);
// 回傳 std class
var_dump(json_decode ($json));
// 回傳 array
var_dump(json_decode($json, true));
```
標籤:
php
訂閱:
文章 (Atom)