zephir-(4)基本语法

zephir-基本语法

前言

先在这里感谢各位zephir开源技术提供者

每个语言都有它的语法,每个语言都有他的结构,那么今天就来和小编来讨论zephir的文件结构和命名空间,变量声明, 一些语法习惯,和一些其他的概念。

注:笔者水平有限,说的不正确的地方希望大家多多指正,一同交流技术

附上:

喵了个咪的博客:w-blog.cn

zephir官网地址:http://zephir-lang.com/

github地址:https://github.com/phalcon/zephir

1. 基本语法结构

在PHP中,您可以将任何文件中的代码没有一个特定的结构。但在Zephir中,每个文件必须包含一个类。每个类必须有一个名称空间和目录结构必须匹配,类的名称和名称空间配合使用。

1.1 文件结构和命名空间

例如,给出下面的结构,每个文件都必须的类:

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如果文件或类不是位于预期的文件会提示编译器异常.

1.2 指令分离

您可能已经注意到,很少有分号出现在前一章中的代码示例。 您可以使用分号来分隔语句和表达式,如Java、C / c++、PHP和类似的语言:

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

1.3 注释

Zephir支持“C”/“c++”注释,一行注释和//多行注释以/…… /:

// this is one line comment

/**
 * multi-line comment
 */

在大多数语言中,注释会被文本被编译器/解释器忽略。 在Zephir, 多行注释也用作docblocks,它会生成代码, 他们语言的一部分!

注意:如果不是docblock预计的结果编译器将抛出一个异常。

2 变量

2.1 变量声明

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;

2.2 变量作用域

所有变量声明的局部作用域都是方法级别的:

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;
    }

}

2.3 超级全局变量

Zephir不支持全局变量,从PHP用户访问全局变量是不允许的。 然而,您可以访问PHP的超全局变量如下:

//Getting a value from _POST
let price = _POST["price"];

//Read a value from _SERVER
let requestMethod = _SERVER["REQUEST_METHOD"];

2.4 符号

每一个用PHP符号,并且允许写变量写在一个符号上面解析:

<?php

$b = 100;
$a = "b";
echo $$a; // prints 100

Zephir没有实现这个功能,因为所有变量编译到低级变量 也没有办法知道哪些变量存在于一个特定的上下文。 如果你想创造 一个变量在当前的PHP符号表中,你可以使用下面的语法:

//设置在PHP变量$的名字
let {"name"} = "hello";

//在PHP中设置变量$的值
let name = "price";
let {name} = 10.2;

3. 总结

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

今天我们主要了解了zephir的文件规范,已经变量注释符号这些特性,下一小节将会对类型进行详解,谢谢大家的支持

zephir技术交流:246348908 欢迎大家的加入!

时间: 2024-12-09 02:56:05

zephir-(4)基本语法的相关文章

zephir-(2)安装和初体验

zephir-安装和初体验 前言 先在这里感谢各位zephir开源技术提供者 zephir主要是解决了PHP开发人员尝试编写和编译PHP拓展所能执行的代码的语言.这是一个支持动态/静态类型的语言,熟悉PHP开发人员可以很好的进行开发.zephir这个名字的主要来源是(Zend Engine/PHP/Intermediate),今天首先介绍zephir的安装,接着会对zephir进行一些语法上面的介绍,希望大家喜欢! 注:笔者水平有限,说的不正确的地方希望大家多多指正,一同交流技术 附上: 喵了个

VB.NET基础语法

很久以来,VB因为缺乏完善的面向对象支持.缺乏高效的错误处理机制和性能表现不佳,因而一直受到某些人的嘲笑.VB.NET将彻底改变这种情况.然而,VB.NET在这些方面的改进也要付出代价,许多旧的代码需要手工进行转换才能在VB.NET下运行. 下面几个表格总结了VB.NET语言在语法上的改动之处.注意这些表格并没有完全列出所有改动之处,但列出了最重要的一些改动. 表A对比了VB6中一些熟悉的语法形式及其在VB.NET中类似功能最接近的语法形式. 表A:语法对比旧语法 新语法 说明窗体装载事件,类初

Swift语法专题十二——方法

Swift讲解专题十二--方法 一.引言         方法只是一个术语,其实就是将函数与特定的类型结合,类.结构体.枚举都可以定义方法,方法又分为实例方法和类型方法,类型方法类似于Objective-C中的类方法.Swift和Objective-C的一大不同是,Objective-C只有在类中可以定义方法. 二.实例方法基础         实例方法的语法和函数完全一致,其和具体类型的实例所关联,实例方法在调用时由类型的实例点语法进行调用来完成一些功能模块.示例如下: class Math

一个简单的C语言词法分析与语法分析器

词法分析 可识别内容: 标识符:id 数字:num 关键字:int,char,if,else,while,do,for 标号:, , . ,  ; 算术运算符号:=,+,-,*,/,&,!,|,&&,|| 关系运算符:<,<=,>=,>,==,!= 注释:// 内码定义: 单个符号,如{,+,*,> 等,均使用其ascii码做内码,占双或多个字节的符号(包括保留字,标号,数字,运算符等)为其取名如下: Enum { END=0,INT,CHAR,IF,

Lua 笔记--语法

        Lua允许"多重赋值",也就是一下子将多个值赋予多个变量.每个值或每个变量之间以逗号分隔: a, b = 10, 2*x         在多重赋值中,Lua先对等号右边的所有元素求值,然后才执行赋值. x, y = y, x        -->交换x 与y         Lua总是会将等号右边值的个数调整到与左边变量的个数相一致.规则是:若值的个数少于变量的个数,那么多余的变量会被赋为nil :若值的个数更多的话,那么多余的值会被"静悄悄地&quo

markdown使用基本语法

### 1. 斜体和粗体 使用 * 和 ** 表示斜体和粗体. 示例: 这是 *斜体*,这是 **粗体**. ### 2. 分级标题 使用 === 表示一级标题,使用 --- 表示二级标题. 示例: ``` 这是一个一级标题 ============================ 这是一个二级标题 -------------------------------------------------- ### 这是一个三级标题 ``` 你也可以选择在行首加井号表示不同级别的标题 (H1-H6),例

Cmd Markdown编辑器简明语法手册

1. 斜体和粗体 使用 * 和 ** 表示斜体和粗体. 示例: 这是 斜体,这是 粗体. 2. 分级标题 使用 === 表示一级标题,使用 --- 表示二级标题. 示例: 这是一个一级标题 ============================ 这是一个二级标题 -------------------------------------------------- ### 这是一个三级标题 你也可以选择在行首加井号表示不同级别的标题 (H1-H6),例如:# H1, ## H2, ### H3,

java-mysql 语法错误的问题

问题描述 mysql 语法错误的问题 在写课程设计时已经连接好数据库执行sql语句时抛出异常说是sql语句错误可是前面的引用都好着呢求大神帮助ps:数据库里面id的类型是 int (11) 外面传递过去是 String请问有影响吗?多谢代码如下:String sql1 = ""update test0 set name = "" + tf1.getText() + ""where test0.id = ""+inputValu

Eclipse中JS文件即使取消语法验证仍提示错误

     我想大家应该都遇到过这种问题:js文件一直提示报错,如图:  通常的做法都是取消js文件的语法验证,操作如图:   首先你的项目上鼠标右键-->Properties  然而,这招并不是放之四海而皆准的,如果取消了js语法验证仍然报错怎么办? 其实对付这种问题的终极解决办法如下:    首先你的项目上鼠标右键-->Properties        如果有多个js文件,一个个的add有点繁琐,这时候你可以点击Add Multiple进行批量添加,如图:    最后重新构建你的整个项目,