В этой главе мы обсудим организацию файлов и пространств имен, объявления переменных, разные синтаксические соглашения и несколько других концепций.

Организация кода в файлах и пространствах имен

В PHP вы можете поместить код в любой файл без определенной структуры. В Zephir каждый файл должен содержать класс (и только один класс). Каждый класс должен иметь пространство имен, а структура каталогов должна соответствовать именам используемых классов и имен.

Например, для следующей структуры классы в каждом файле должны быть:

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 поднимет исключение компилятора, если файл или класс не находится в ожидаемом файле или наоборот.

Разделение инструкций

Возможно, вы уже заметили, что в примерах кода в предыдущей главе было очень мало точек с запятой. Вы можете использовать точки с запятой для разделения операторов и выражений, как в Java, C / C ++, PHP и подобных языках:

myObject->myMethod(1, 2, 3); echo "world";

Комментарии

Zephir поддерживает комментарии ‘C’/’C++’, это одна строка комментариев с // и многострочными комментариями с /* ... */:

// Это комментарий в одной строке

/**
 * Многострочный комментарий
 */

В большинстве языков комментарии - это просто текст, игнорируемый компилятором/интерпретатором. В Zephir многострочные комментарии также используются в качестве док-блоков, и они экспортируются в сгенерированный код, поэтому они являются частью языка !.

Если док-блок не находится там, где ожидается, компилятор выдаст исключение.

Объявления переменных

В 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; // prints 100

Zephir не реализует эту функцию, так как все переменные скомпилированы до низкоуровневых переменных и не существует способа узнать, какие переменные существуют в определенном контексте. Если вы хотите создать переменную в текущей таблице символов PHP, вы можете использовать следующий синтаксис:

//Установить переменную $name в PHP
let {"name"} = "hello";

//Установить переменную $price в PHP
let name = "price";
let {name} = 10.2;

Содержание.

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