【PHP拡張開発】Zephir基礎編


前回の「Zephir概要」では、環境構築について簡単に説明し、簡単な例を作成しました.この記事ではZephirベースについて引き続きご紹介します.
基本構文Zephirでは、各ファイルに1つのクラスが必要であり、各クラスに1つのネーミングスペースが必要であり、ディレクトリ構造は使用するクラスとネーミングスペースの名前と一致しなければならない.これはPSR 4の約束と一致するが、強制的である.スペース名とクラス名の頭文字は大文字で、ファイル名はすべて小文字です.
変数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のいくつかの文を提供し、最初の3つはPHPとほぼ一致している.Zephir制御文のカッコは必須ではありません.loopはwhile trueに相当する無限ループを作成するために使用できます
let n = 40;
loop {
    let n -= 2;
    if n % 5 == 0 { break; }
    echo x, "
"; }

forはPHPと同様にインデックスvalueとkey=>valueをサポート
for item in ["a", "b", "c", "d"] {
    echo item, "
"; } let items = ["a": 1, "b": 2, "c": 3, "d": 4]; for key, value in items { echo key, " ", value, "
"; }

非常に友好的で逆方向の遍歴を提供しています
let items = [1, 2, 3, 4, 5];

for value in reverse items {
    echo value, "
"; }

pythonなどの言語と同様に、一連の整数値を遍歴して、このように書くことができます.
for i in range(1, 10) {
    echo i, "
"; }

例外処理
例外処理は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公式ドキュメント