熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

PHP5.3語言特性

2022-06-13   來源: PHP編程 

  性能提升

  php 的總體性能提升了 %

  md()快了%
Better stack implementation in the engine
Constants移到readonly內存裡
exception處理過程改進(簡化opcodes更少)
(require/include)_once改進去掉重復open
Smaller binary size & startup size with gcc

  新語言特性

  __DIR__

  在以前為了獲得當前腳本的目錄需要一次函數調用

  CODE:
echo dirname(__FILE__); // < PHP

  在只需要一個魔術常量__DIR__就解決了

  CODE:
echo __DIR__; // >= PHP

  ?:操作符

  便捷的?:操作符可以從兩個值/表達式中快速取得非空值

  CODE:
$a = true ?: false; // true
$a = false ?: true; // true
$a = ?: ; //
$a = ?: ; //
$a = array() ?: array(); // array();
$a = strlen() ?: strlen(a); //

  __callStatic()

  新增了魔術方法__callStatic功能和__call類似但是僅對static方法有效

  CODE:
class helper {
        static function __callStatic($name $args) {
                echo $name(implode( $args));
        }
}
helper::test(foobar); // test(foobar)

  動態調用static方法

  動態的調用靜態方法?動靜結合

  CODE:
class helper {
        static function foo() { echo __METHOD__; }
}
$a = helper;
$b = foo;
$a::$b(); // helper::foo

  Late Static Binding

  不知道怎麼譯可能留個原文更容易理解靜態方法的事件處理時機有變化以前是在編譯期處理現在是執行期間處理

  在php 之前下面的代碼會輸出一個A但是這不是咱們要的whoami方法已經在class B中重新定義它本該輸出B才符合咱們想當然的思維

  CODE:
class A {
   public static function whoami() {
      echo __CLASS__;
   }
   public static function identity() {
     self::whoami();
   }
}
class B extends A {
   public static function whoami() {
      echo __CLASS__;
   }
}
B::identity(); // A < PHP <

  下面代碼中使用了static::whoami()來調用靜態方法php 之後由於__CLASS__是在執行期被處理那麼這個例子中能順利抓到class B

  CODE:
class A {
   public static function whoami() {
      echo __CLASS__;
   }
   public static function identity() {
      static::whoami();
   }
}
class B extends A {
   public static function whoami() {
      echo __CLASS__;
   }
}
B::identity(); // B <>= PHP

  mysqlnd

  mysqlnd成為php 中的默認mysql驅動它有如下優點

  mysqlnd更容易編譯: 因為它是php源碼樹的一個組成部分
mysqlnd和php內部機制結合更緊密是優化過的mysql驅動
mysqlnd更節省內存從測試結果來看比傳統的mysql擴展節省%的內存
mysqlnd更快
mysqlnd提供了豐富的性能統計功能
mysqlnd使用了PHP license以避免不必要的版權糾紛

  這個改動應同時對mysql和pdo_mysql擴展生效

  mysqlnd是什麼

  mysqlnd是mysql原裝的php驅動

  但是PDO_MySQL暫時還不支持mysqlnd目前只有mysql(i)擴展可以用到


From:http://tw.wingwit.com/Article/program/PHP/201311/21340.html
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.