一、mysql教程驅動mysqlnd 一直以來,php教程都是通過mysql客戶端連接mysql,而現在mysql官方已經推出php版的mysql客戶端,而這個mysqlnd有效降低內存的使用以及提高性能。具體可以看: http://dev.mysql.com/downloads/connector/php-mysqlnd/ http://forge.mysql.com/wiki/PHP_MYSQLND 從圖中可以看出,使用mysqlnd少了從mysql驅動中復制數據到php擴展這一步。mysqlnd使用copy-on-write,也就是寫時復制,讀引用。 mysqlnd已經內置在php5.3的源碼中,編譯的時候使用--with-mysql=mysqlnd、--with-mysqli=mysqlnd 和 --with-pdo-mysql=mysqlnd 安裝mysqlnd驅動。 mysqlnd的優點 編譯php更方便了,不需要libmysql,已經內置在源碼中
四、名字空間(namespace)
這是個很好的功能,沒加入之前都是用前綴來解決命名污染的,方法有點山寨,呵呵。class ParentClass {如果繼承這個父類,那子類的單件必須再重寫覆蓋父類的getInstance。5.3支持用static來延遲綁定,但是很遺憾,即使有static關鍵字卻不能使用new static來實例化,不過有變通的方法
static private $_instance;
private function __construct() {
}
static public function getInstance() {
if (!isset(self::$_instance)) {
self::$_instance = new self();
}
return self::$_instance;
}
}
class ParentClass {這個新特性當前可能會有問題存在,暫時不建議使用。 六、新的魔法函數__callStatic 其實就是__call的靜態版,調用的靜態方法不存在會調用這個魔法函數,但是低效 七、通過變量調用靜態(Variable Static Calls) 以前可以通過變量調用對象的方法,例如$instance->$method();,而靜態方法不支持,5.3後就支持了可以通過$someClass::$method()調用了,但是低效。 八、日期函數date_create_from_format 把字符串轉換成時間戳,如果使用strtotime的話,日期格式是php解析的,而5.3的date_create_from_format可以設置字符串的日期格式,
static private $_instance;
private function __construct() {
}
static public function getInstance() {
if (!isset(self::$_instance)) {
$class = static::getClass();// 使用static延遲綁定
self::$_instance = new $class();
}
return self::$_instance;
}
static public function getClass() {
return __CLASS__;
}
}
$date = strtotime("08-01-07 00:00:00");//php 認為格式 是年-月-日九、匿名函數(Lambda functions)和閉包(closures) js有個很爽的地方就是支持函數式編程,php很不爽的地方就是函數太過正規了,不過5.3後php更自由了。 定義匿名函數的語法
var_dump(date("Y-m-d", $date)); // string(10) "2008-01-07"
$date = date_create_from_format("m-d-y", "08-01-07");//告訴php格式是 月-日-年
var_dump($date->format('Y-m-d')); // string(10) "2007-08-01"
$lambda = function () { echo "Hello World!n"; };
function replace_spaces ($text) {
$replacement = function ($matches) {
return str_replace ($matches[1], ' ', ' ').' ';
};
return preg_replace_callback ('/( +) /', $replacement, $text);
}
function replace_spaces ($text) {產生閉包的語法
return preg_replace_callback ('/( +) /',
function ($matches) {
return str_replace ($matches[1], ' ', ' ').' ';
}, $text);
}
function (normal parameters) use ($var1, $var2, &$refvar) {}引入了use語法,並且支持引用變量 十、新魔法常量__DIR__ 以前只有__FILE__,為了得到當前文件所在的路徑,都是用dirname(__FILE__)來得到的,現在可以用__DIR__代替了 十一、NOWDOC php定義字符串有一種格式叫定界符.
$foo = <<this is $fubar這種方式稱為HEREDOC,php會解析裡面的變量,而有時候我們不需要解析變量,5.3加入了NOWDOC,其實就是定界符的單引號版
ONE;
$bar = <<<'TWO' this is $fubar TWO;這樣,php只把它當作字符串,變量不會解析 十二、GC 因為php本身工作機制的原因,所以php的GC機制只要高效就夠了,允許少量內存洩漏,畢竟程序執行完畢就會釋放所有申請的內存,根本不會有內存洩漏的問題,但這只是對於短暫運行的程序而言,如果用php編寫持久執行就要考慮內存洩漏問題了。
gc_enable(); // 激活GC,增強GC機制,回收循環引用的無效變量
var_dump(gc_collect_cycles()); // 強制回收已無效的變量
gc_disable(); // 禁用GC