【PHP 擴充套件開發】Zephir 基礎篇
上一篇 《 Zephir 簡介 》 簡單介紹了環境搭建,編寫了一個的簡單示例。這一篇繼續介紹 Zephir 基礎。
基本語法
Zephir 中,每個檔案都必須有且只有一個類,每個類都必須有一個名稱空間,目錄結構必須與所使用的類和名稱空間的名稱相匹配,這一點和 PSR4 的約定一致,但是它是強制的。空間名和類名首字母大寫,檔名全部小寫。
變數
Zephir 支援動態型別和靜態型別。變數作為函式返回值時,必須宣告為動態型別。
動態變數與 PHP 中的變數基本完全相同,支援在使用時改變型別。
與 PHP 不一樣,變數名不需要帶$符號,所有變數在使用前都需要先定義,動態型別通過 var 關鍵字宣告。
var a = 10,b,c; let b = 20; let c = a + b;
與 PHP 不一樣,字串文字只能使用雙引號指定,不能用單引號,也不支援變數解析,比如這樣是不支援的。
var a = "變數解析{$test}"
靜態變數
靜態型別一旦被宣告,就不能更改。支援如下型別
給靜態型別變數賦值,會先嚐試自動轉換,轉換失敗丟擲異常
boolean a; let a = 0; // a = false let a = "string"; // 丟擲異常
運算子
Zephir 的運算子與 PHP 基本一致。比較運算子在運算時考慮變數型別,如果是動態變數與 PHP 一致。不支援太空船操作符、空合併運算子。
特殊運算子 - Fetch
PHP
if (isset($myArray[$key])) { $value = $myArray[$key]; echo $value; }
Zephir
if fetch value, myArray[key] { echo value; }
控制結構
Zephir 提供了 if/switch/while/loop/for 幾種語句,前三種與 PHP 基本一致。Zephir 控制語句中括號是非必選的。
loop 可以用來建立無限迴圈,相當於 while true
let n = 40; loop { let n -= 2; if n % 5 == 0 { break; } echo x, "\n"; }
for 和 PHP 一樣支援索引 value 和 key => value
for item in ["a", "b", "c", "d"] { echo item, "\n"; } let items = ["a": 1, "b": 2, "c": 3, "d": 4]; for key, value in items { echo key, " ", value, "\n"; }
還非常友好的提供了反方向遍歷
let items = [1, 2, 3, 4, 5]; for value in reverse items { echo value, "\n"; }
與 python 等語言一樣,遍歷一系列整數值,可以這麼寫:
for i in range(1, 10) { echo i, "\n"; }
異常處理
異常處理與 PHP 類似,在try 語句中丟擲異常,在 catch 中捕獲。
var e; try { throw new \Exception("This is an exception"); } catch \Exception, e { echo e->getMessage(); }
與 PHP 不一致,Zephir try 語句可以沒有 catch,表示忽略所有異常。
即,這是合法的
try { throw new \Exception("This is an exception"); }
捕獲多個異常也非常方便
var e; try { throw new \Exception("This is an exception"); } catch \RuntimeException|\Exception, e { echo e->getMessage(); }
附件1
官方文件