zephir-(2)安装和初体验

zephir-安装和初体验

前言

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

zephir主要是解决了PHP开发人员尝试编写和编译PHP拓展所能执行的代码的语言。这是一个支持动态/静态类型的语言,熟悉PHP开发人员可以很好的进行开发。zephir这个名字的主要来源是(Zend Engine/PHP/Intermediate),今天首先介绍zephir的安装,接着会对zephir进行一些语法上面的介绍,希望大家喜欢!

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

附上:

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

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

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

1. zephir安装

安装Zephir,请遵循以下步骤:

1.1 环境依赖

zephir主要依赖于下面环境

  • gcc >= 4.x/clang >= 3.x
  • re2c 0.13或更高版本
  • gnu 3.81或更高版本
  • autoconf 2.31或更高版本
  • automake 1.14或更高版本
  • libpcre3
  • php开发工具-phpize

如果你使用Ubuntu,你可以安装所需要的包:

$ sudo apt-get update
$ sudo apt-get install git gcc make re2c php5 php5-json php5-dev libpcre3-dev

由于Zephir是用PHP编写的需要已经安装了最新版本的PHP和它必须在您的控制台可用:

$ php -v
PHP 5.6.5 (cli) (built: Jan 24 2015 20:04:31)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies

同时,确保你也安装了PHP开发库与PHP安装:

$ phpize -v
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226

1.2 安装Zephir

目前Zephir编译器必须从Github克隆

$ git clone https://github.com/phalcon/zephir

运行Zephir安装程序(编译/创建解析器):

$ cd zephir
$ ./install-json
$ ./install -c

测试安装:

zephir help

会得到如下返回:

 _____              __    _
/__  /  ___  ____  / /_  (_)____
  / /  / _ \/ __ \/ __ \/ / ___/
 / /__/  __/ /_/ / / / / / /
/____/\___/ .___/_/ /_/_/_/
         /_/

Zephir version 0.9.2a-dev

Usage:
    command [options]

Available commands:
    install             Installs the extension (requires root password)
    builddev            Generate/Compile/Install a Zephir extension in development mode
    help                Displays this help
    build               Generate/Compile/Install a Zephir extension
    compile             Compile a Zephir extension
    stubs               Generates extension PHP stubs
    version             Shows the Zephir version
    init [namespace]    Initializes a Zephir extension
    fullclean           Cleans the generated object files in compilation
    api [--theme-path=/path][--output-directory=/path][--theme-options={json}|/path]Generates a HTML API
    generate            Generates C code from the Zephir code
    clean               Cleans the generated object files in compilation

Options:
    -f([a-z0-9\-]+)     Enables compiler optimizations
    -fno-([a-z0-9\-]+)  Disables compiler optimizations
    -w([a-z0-9\-]+)     Turns a warning on
    -W([a-z0-9\-]+)     Turns a warning off

注意:当前最新开发版本在0.9.2a-dev稳定版为0.8.0b

2 Zephir初体验

还记得在开篇那个Helloword例子吗?我们先来简单介绍一下zephir编译机制在对例子介绍一下zephir的语法

2.1 编译/解释

每一种语言都有它自己的“Hello World!”示例,在此ZEPHIR介绍性的例子展示了这种语言的一些重要特性。

在ZEPHIR代码必须放在类。这种语言的目的是建立面向对象的库/框架,因此代码移出一类是不允许的。此外,需要一个名称空间:

namespace Test;

class Hello
{
    public function say()
    {
        echo "Hello World!";
    }
}

一旦这类编译它产生以下代码gcc/clang/vc++:

EPHIR_INIT_CLASS(Test_Hello) {
    ZEPHIR_REGISTER_CLASS(Test, Hello, hello, test_hello_method_entry, 0);
    return SUCCESS;
}

PHP_METHOD(Test_Hello, say) {
    php_printf("%s", "Hello World!");
}

实际上,它预计不需要使用Zephir的开发人员必须知道或者理解C编译器,然而开发人员使用Zephir的时候,如果你有任何经验php内部或C语言本身的了解,将会有一个更清晰的了解在。

2.2 进一步了解zephir的感觉

在下面的例子中,我们将描述足够的细节,所以你理解发生了什么。 我们的目标是给你一个编程在Zephir是什么样的感觉。 我们将探讨的细节 功能在后续章节。

下面的例子非常简单,它实现了一个类和一个小程序,检查方法 一个数组的类型

让我们更详细地解释一下代码,所以我们可以开始学习Zephir语法。 有很多细节在短短几行代码! 我们将解释一般的想法:

namespace Test;

/**

  • MyTest (test/mytest.zep) */ class MyTest { public function someMethod() {

     /* 变量必须声明 */
     var myArray;
     int i = 0, length;
    
     /*创建一个数组 */
     let myArray = ["hello", 0, 100.25, false, null];
    
     /* 数组有多少个元素*/
     let length = count(myArray);
    
     /* 打印值类型 */
     while i < length {
         echo typeof myArray[i], "\n";
         let i++;
     }
    
     return myArray;
    

    } }

方法中,第一行使用“var”和“int”关键字用于声明一个变量在当地范围。 每一个变量用于方法必须用其各自的类型声明。 这个声明不是可选的, 它帮助编译器报告关于键入变量或变量的使用范围 通常在运行时错误结束。

动态变量是用的var关键字来声明。 这些变量可以分配和重新分配 不同的类型。 另一方面,我们有“i”和“length”整数静态类型的变量 只能有这种类型的值在整个程序执行。

与PHP相比,你不需要把美元符号($)在变量名前面。

Zephir遵循相同的评论约定为Java,c#、c++,等等。 / /注释的一条线,而/ 注释 /可以跨行。默认变量是不可变的,这意味着Zephir预计大多数变量 不变。 变量保持初始值可以优化的编译器静态常量。 当需要更改变量的值,必须使用关键字“let”:

/* 创建一个数组 */
let myArray = ["hello", 0, 100.25, false, null];

默认情况下,PHP数组是动态的,它们可能包含不同类型的值。 函数从PHP用户可以Zephir代码中调用,函数的示例中“count” 被调用时,编译器可以执行优化避免这个调用,因为它已经知道的大小 数组:

/*数组有多少个元素 */
let length = count(myArray);

括号在控制流语句是可选的,您也可以使用它们,如果你感觉更舒服。

while i < length {
    echo typeof myArray[i], "\n";
    let i++;
}

PHP仅适用于动态变量,方法总是返回动态变量,这意味着如果一个 返回静态类型的变量,在PHP的一面,你会得到一个动态变量,可以使用 在PHP代码。

注意,内存是由编译器自动管理的,所以你不需要分配或释放 记忆像C,比PHP以类似的方式工作。

3. 总结

我们来回顾一下zephir这个名字的来源是(Zend Engine/PHP/Intermediate),今天主要介绍了zephir的安装,和他的一些基本特性信息,在后面的章节将会进入正章,来从一步一步深入了解zephir!

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

时间: 2024-08-03 20:12:01

zephir-(2)安装和初体验的相关文章

XenApp / XenDesktop 7.6 初体验一 安装, 配置站点和序列号服务

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://beanxyz.blog.51cto.com/5570417/1579558 最新的Xen Desktop/Xenapp 已经到7.6的版本了.豆子自己搭建了个实验环境练练手. 虚拟平台我使用的是ESXi 5.5,OS都是windows 2012R2,之前我已经设置了Vcenter,DC和SQL 服务器.可以说准备工作基本上都好了.登录 Citrix.com,下载试用版的ISO镜

初体验JBossESB 及 部署使用 Hello World QuickStart

http://yulimin.javaeye.com/blog/52980 关键字:   ESB SOA     初体验JBossESB 及 部署使用 Hello World QuickStart1.下载 JBoss 4.0.5 GA 及 JBossESB 4.0 CR2 并解压,如果是src包的话,进入JBossESB目录运行ant install %JBoss_HOME% : C:/OpenSource/JBoss/4.0 %JBossESB_HOME% : C:/OpenSource/JB

新手RoR十分钟初体验Step By Step

http://yulimin.javaeye.com/blog/35929 关键字: rails   Ruby Rails RoR     新手RoR十分钟初体验Step By Step 声明一下,这是个新手启动的体验文章,高手不要看了...:) 1.安装RubyWindows用户去 http://rubyforge.org/ 的 http://rubyforge.org/projects/rubyinstaller/ 下载 One-Click Installer - Windows 安装即可,

Fireworks MX 之初体验1-1

在编者的苦口婆心,盛情邀请下,风云设计 的两位高手 风筝 和 心动为谁 终于答应,为广大朋友奉献对 Fireworks MX 的亲密接触后带来的初体验,为喜爱 Fireworks 的 fans 们作出贡献,特此鸣谢! Fireworks MX 初体验 正如好多"专家"预料的那样,Fireworks Mx(Beta)[以后简称FWMX]终于在5月份左的时候出现了.估计刚刚拿到测试版的朋友们的心情肯定和我是一样的--激动得很.并且对她充满无限憧憬.我现在倒是真的很想知道各位在安装后,然后真

Fireworks MX 之初体验2-1

在编者的苦口婆心,盛情邀请下,风云设计 的两位高手 风筝 和 心动为谁 终于答应,为广大朋友奉献对 Fireworks MX 的亲密接触后带来的初体验,为喜爱 Fireworks 的 fans 们作出贡献,特此鸣谢! 优化菜单面面观 上节我们对FWMX的最新.最酷(好像我很能落伍一样,总用老掉牙的词汇~)的各种新面板做了一个简单的介绍和了解,不知道各位是不是已经拿到了FWMX的测试版本开始体验了,相信体验的感觉总的来说应该是美妙的.本节我们来一起看看FWMX的各级菜单及其相关命令.同样,我们仍然

Windows Phone 7开发教程(1)——Windows Phone开发工具初体验

这是为<程序员>4月期写的文章,是在<双重惊喜-- Windows Phone Developer Tools初体验>的基础上增加了一些内容, 包括WebBrowser空间.MediaPlayer空间,还有一个非常简单的XNA程序.希望对 Windows Phone开发有兴趣的朋友有一些帮助. Windows Phone开发工具在MIX 2010上火热登场了.Windows Mobile开发者们 压抑许久的热情终于爆发出来,对于Windows Phone的华丽转身,开发者们褒贬 不

Docker的Windows容器初体验

系列文章 第一篇 Docker的Windows容器初体验 - 本文 第二篇 阿里云Windows Server 2016环境Docker试用 最近微软发布了Windows Server 2016,其中最让广大开发者和运维同学期待的就是Docker对Windows容器的支持. Windows支持两种不同类型的容器,即 Windows Server 容器和 Hyper V 容器. 这两种类型的容器的使用方式相同,也支持相同的容器映像. 但是它们的实现机制不同,提供了不同的安全隔离级别 Windows

wxWidgets初学者导引(3)——wxWidgets应用程序初体验

wxWidgets初学者导引全目录   PDF版及附件下载 1 前言2 下载.安装wxWidgets3 wxWidgets应用程序初体验4 wxWidgets学习资料及利用方法指导5 用wxSmith进行可视化设计附:学习材料清单 3 wxWidgets应用程序初体验 本文中所有的体验,在Code::Blocks中进行. 为了在Code::Blocks中编译运行C++写的wxWidgets程序,需要再做些设置. 首先,需要在环境变量里添加一个wxWidgets根目录环境变量.设置方法类似于2.3

Java8初体验(一)lambda表达式语法

感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解偏差的地方,希望大家帮忙指出,我会持续修改和优化.本文是该系列的第一篇,主要介绍Java8对屌丝码农最有吸引力的一个特性-lambda表达式. java8的安装 工欲善其器必先利其器,首先安装JDK8.过程省略,大家应该都可以自己搞定.但是有一点这里强调一下(Windows系统):目前我们工作的版本