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!
注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!
zephir技术交流:246348908 欢迎大家的加入!
感谢zephir开发人员:
- MAC使用adb工具
- 并发编程之master-worker模式
- Android WebView全面总结
- Url参数中出现+、空格、=、%、&、#等字符的解决办法
- 解决CSS垂直居中的几种方法(基于绝对定位,基于视口单位,Flexbox方法)
- Go语言学习之cgo(golang与C语言相互调用)
- golang之旅--数据类型之字符串
- Android保存图片到系统图库
- 基于Vue.js的大型报告页项目实现过程及问题总结(二)
- 使用Hexo搭建专属Blog
- Android项目中文字乱码问题
- golang中发送http请求的几种常见情况
- 注册中心 Eureka 源码解析 —— Eureka-Server 启动(一)之 ServerConfig
- lua表排序
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- laravel-admin的多级联动方法
- Laravel数据库读写分离配置的方法
- php给数组赋值的实例方法
- php实现分页功能的详细实例方法
- 浅谈Laravel中的三种中间件的作用
- laravel 使用auth编写登录的方法
- laravel框架 laravel-admin上传图片到oss的方法
- php实现推荐功能的简单实例
- php实现登录页面的简单实例
- Laravel 自带的Auth验证登录方法
- laravel实现上传图片的两种方式小结
- Laravel开启跨域请求的方法
- Laravel 5.4前后台分离,通过不同的二级域名访问方法
- Yii框架数据库查询、增加、删除操作示例
- 在laravel5.2中实现点击用户头像更改头像的方法