006 Базовый синтаксис
В этой главе мы обсудим организацию файлов и пространств имен, объявления переменных, разные синтаксические соглашения и несколько других концепций.
Организация кода в файлах и пространствах имен
В 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;