012 Управляющие структуры
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;