Управляющие структуры
Zephir реализует упрощенный набор управляющих структур, присутствующих в подобных ему языках, таких как C, PHP и т.п.
Условные операторы
Оператор if
Условный оператор if
реализует выполнение своего блока при условии, что некоторое логическое выражение (условие) принимает значение «истина» (true
). Фигурные скобки обязательны. Оператор if
может иметь необязательное предложение else
. При необходимости, несколько конструкций if
/else
могут быть соединены вместе:
if false {
echo "ложь?";
} else {
if true {
echo "истина!";
} else {
echo "ни истина и ни ложь";
}
}
Вы также можете использовать elseif
:
if a > 100 {
echo "Значение a слишком большое";
} elseif a < 0 {
echo "Значение a слишком маленькое";
} 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;