Базовий синтаксис
У цьому розділі ми обговоримо організацію файлів, простори імен, оголошення змінних, різні синтаксичні конвенції та кілька інших загальних понять.
Розміщення коду в файлах та простори імен
У PHP ви можете розмістити код в будь-який файл, без конкретної структури. У Zephir кожен файл мусить містити клас (і тільки один клас). Кожен клас повинен мати простір імен, а структура каталогів повинна відповідати іменам класів та просторам імен. (Це схоже на PSR-4-автозавантажувальну конвенцію, за винятком того, що вона застосовується самою мовою.)
Наприклад, з огляду на наступну структуру кожен файл має мати наступні класи:
mylibrary/
router/
exception.zep # MyLibrary\Router\Exception
router.zep # MyLibrary\Router
Клас у mylibrary/router.zep
:
namespace MyLibrary;
class Router
{
}
Клас у mylibrary/router/exception.zep
:
namespace MyLibrary\Router;
class Exception extends \Exception
{
}
Zephir викине виняток (exception) компілятора, якщо файл або клас не знаходяться в очікуваному файлі, або навпаки.
Розділення інструкцій
Можливо, ви вже помітили, що в прикладах коду в попередньому розділі було дуже мало крапок з комою. Ви можете використовувати крапку з комою для відокремлення тверджень та виразів, як у Java, C/C++, PHP та подібних мовах:
myObject->myMethod(1, 2, 3); echo "world";
Коментарі
Zephir підтримує коментарі в стилі ‘C’/’C++’. Це однорядкові коментарі з // ...
, та багаторядкові з /* ... */
:
// це однорядковий коментар
/**
* це багаторядковий
* коментар
*/
У більшості мов коментарі це просто текст, який ігнорується компілятором/інтерпретатором. У Zephir-і багаторядкові коментарі також використовуються як док-блоки (docblocks) і вони експортуються до згенерованого коду, так що вони - частина мови!
Якщо док-блок не знаходиться там, де він очікується, компілятор викине виключення.
Оголошення змінних
У Zephir-і всі змінні, які використовуються в даній області видимості мають бути оголошені. Це дає компілятору можливість виконати оптимізацію та перевірки. Змінні мають бути унікальними ідентифікаторами. Ключові слова не можуть бути іменами змінних.
// Оголошення змінних для одного і того ж типу в тій же інструкції
var a, b, c;
// Оголошення кожної змінної в окремому рядку
var a;
var b;
var c;
Змінні можуть мати початкове сумісне значення:
// Оголошення змінних зі значеннями за замовчуванням
var a = "hello", b = 0, c = 1.0;
int d = 50; bool some = true;
Імена змінних чутливі до регістру, наступні змінні є різними:
// Різні змінні
var somevalue, someValue, SomeValue;
Область видимості
Усі оголошені в методі змінні залишаються в його локальній області видимості:
namespace Test;
class MyClass
{
public function someMethod1()
{
int a = 1, b = 2;
return a + b;
}
public function someMethod2()
{
int a = 3, b = 4;
return a + b;
}
}
Суперглобальні змінні
Zephir не підтримує глобальні змінні - доступу до глобальних змінних з PHP немає. Однак, ви можете отримати доступ до суперглобальних змінних PHP наступним чином:
// Отримання значення з _POST
let price = _POST["price"];
// Читання даних з _SERVER
let requestMethod = _SERVER["REQUEST_METHOD"];
Локальна таблиця символів
Кожен метод або контекст у PHP має таблицю символів, яка дозволяє вам записувати змінні у дуже гнучкий спосіб:
<?php
$b = 100;
$a = "b";
echo $$a; // надрукує 100
У Zephir не передбачено реалізації цієї функціональності, тому що всі змінні компілюються до низькорівневих змінних, і немає ніякого способу дізнатися, які змінні існують у специфічному контексті. Якщо ви хочете створити змінну в поточній таблиці символів PHP, використайте такий синтаксис:
// Встановлює змінну $name у PHP
let {"name"} = "hello";
// Встановлює змінну $price у PHP
let name = "price";
let {name} = 10.2;