首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 5 / Zend Engine 2 核心改進全景解析

     編輯:PHP 綜合知識

全新物件模型

PHP 5 完全重寫物件處理機制:物件儲存於獨立 Object Store,zval 僅保存指標(handle)。複製物件或傳參數時不再複製內容,而是共享指標——物件預設以參考傳遞,無需 & 宣告。舊程式碼幾乎無需修改即可相容。

可見性控制

  • private:僅本類別可存取
  • protected:本類別與子類別可存取
  • public:公開存取(預設)

同時支援方法可見性,子類別可覆寫 protected/public 方法,private 方法不可繼承。

抽象類別與介面

abstract class AbstractClass {
    abstract public function test();
}

interface Throwable {
    public function getMessage();
}

class Exception implements Throwable {
    public function getMessage() { /* ... */ }
}

抽象類別不可實例化;介面定義契約,類別可實作多個介面。

類型提示

function foo(Foo $obj) { ... }
// 等同於運行時檢查:
function foo($obj) {
    if (!($obj instanceof Foo)) die("Argument must be Foo instance");
}

僅適用物件類型,運行時檢查而非編譯期。

Final 關鍵字

final class Foo { }           // 不可被繼承
class Bar { final function baz() { } } // 方法不可被覆寫

物件複製

$copy = clone $object; // 呼叫 __clone()

class MyCloneable {
    function __clone() {
        $this->id = self::$nextId++; // 重新生成 ID
        $this->resource = new Resource(); // 重新取得資源
    }
}

未定義 __clone() 時預設淺複製所有屬性。

統一建構子/解構子

class Base {
    function __construct() { print "Base\n"; }
}
class Sub extends Base {
    function __construct() {
        parent::__construct(); // 明確呼叫父建構子
        print "Sub\n";
    }
    function __destruct() {
        parent::__destruct(); // 明確呼叫父解構子
        print "Cleanup\n";
    }
}

相容舊式同名建構子;解構子於最後一個參考消失時自動呼叫。

類別常數

class Foo {
    const CONSTANT = 'value';
    const A = 1<<0;
    const B = 1<<1;
    const C = self::A | self::B; // 編譯期計算
}
echo Foo::CONSTANT;

異常處理

try {
    throw new MyException("Error");
} catch (MyException $e) {
    echo $e->getMessage();
} finally { // PHP 5.5+
    // 清理工作
}

其他重要特性

  • 靜態成員:static $var、static function()、Class::$var、Class::method()
  • instanceof:型別檢查關鍵字
  • __autoload():類別自動載入攔截器
  • 多載:__call()、__get()、__set() 處理未定義方法/屬性存取
  • 函數參考參數預設值:function(&$var = null)
  • __METHOD__ 常數:取得當前方法名
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved