Zephir реализует упрощенный набор структур управления, присутствующих в подобных языках, таких как C, PHP и т.д.

Условные

Оператор If

Оператор ‘if’ оценивает выражение, выполняет свой блок, если оценка true. Фигурные скобки обязательны, ‘if’ может иметь необязательное предложение ‘else’, несколько конструкций ‘if’/’else’ могут быть соединены вместе:

if false {
    echo "false?";
} else {
    if true {
        echo "true!";
    } else {
        echo "neither true nor false";
    }
}

Вы также можете использовать ‘elseif’:

if a > 100 {
    echo "слишком много";
} elseif a < 0 {
    echo "слишком мало";
} elseif a == 50 {
    echo "идеально!";
} else {
    echo "сойдет";
}

Скобки в оцениваемом выражении необязательны:

if a < 0 { return -1; } else { if a > 0 { return 1; } }

Оператор Switch

Оператор ‘switch’ сравнивает выражение с рядом предопределенных значений литералов, и выполняет соответствующий блок ‘case’ или в случае неудачи, выполняет блок ‘default’:

switch count(items) {
    case 1:
    case 3:
        echo "odd items";
        break;
    case 2:
    case 4:
        echo "even items";
        break;
    default:
        echo "unknown items";
}

Циклы

Цикл While

While’ обозначает цикл, который выполняет итерацию, пока его заданное условие принимает значение true:

let counter = 5;
while counter {
    let counter -= 1;
}

Цикл Loop

В дополнение к ‘while’, ‘loop’ может использоваться для создания бесконечных циклов:

let n = 40;
loop {
    let n -= 2;
    if n % 5 == 0 { break; }
    echo x, "\n";
}

Цикл For

Цикл ‘for’ является структурой управления, которая позволяет перебирать массивы или строки:

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";
}

Цикл ‘for’ также может быть проинструктирован об обходе массива или строки в обратном порядке:

let items = [1, 2, 3, 4, 5];

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

Цикл ‘for’ может использоваться для перемещения по строковым переменным:

string language = "zephir"; char ch;

for ch in language {
    echo "[", ch ,"]";
}

В обратном порядке:

string language = "zephir"; char ch;

for ch in reverse language {
    echo "[", ch ,"]";
}

Стандартный ‘for’, который проходит диапазон целочисленных значений, можно записать следующим образом:

for i in range(1, 10) {
    echo i, "\n";
}

Чтобы избежать предупреждений о неиспользуемых переменных, можно использовать анонимные переменные в операторах for, заменив имя переменной заполнителем _:

// Используйте ключ, но игнорируйте значение
for key, _ in data {
    echo key, "\n";
}

Оператор break

break’ завершает выполнение текущих операторов ‘while’, ‘for’ или ‘loop’:

for item in ["a", "b", "c", "d"] {
    if item == "c" {
        break; // exit the for
    }
    echo item, "\n";
}

Оператор continue

continue’ используется внутри структур цикла, чтобы пропустить оставшуюся часть текущей итерации цикла и продолжить выполнение при оценке условия, а затем в начале следующей итерации.

let a = 5;
while a > 0 {
    let a--;
    if a == 3 {
        continue;
    }
    echo a, "\n";
}

Оператор require

Инструкция ‘require’ динамически включает и вычисляет указанный PHP-файл. Обратите внимание, что файлы, включенные через Zephir, интерпретируются Zend Engine как обычные PHP-файлы. ‘Require’ не позволяет включать другие файлы Zephir во время выполнения.

if file_exists(path) {
    require path;
}

Оператор let

Оператор ‘let’ используется для изменения переменных, свойств и массивов. Переменные по умолчанию неизменяемые, и эта команда делает их изменяемыми:

let name = "Tony";           // простая переменная
let this->name = "Tony";     // свойство объекта
let data["name"] = "Tony";   // индекс массива
let self::_name = "Tony";    // статическое свойство

Также эта инструкция должна использоваться для увеличения/уменьшения переменных:

let number++;           // инкремент простой переменной
let number--;           // декремент простой переменной
let this->number++;     // инкремента свойства объекта 
let this->number--;     // декремент свойства объекта 

Множественные изменения могут быть выполнены в единственной операции ‘let’:

let price = 1.00, realPrice = price, status = false;

Содержание.

Предыдушая  Следующая

Никаких мыслей по поводу “012 Управляющие структуры”