文档章节

[Zephir官方文档翻译之五] 入门指导

风一样的世界
 风一样的世界
发布于 2014/09/26 12:40
字数 1315
阅读 616
收藏 3

入门指导

Zephir还有这本手册,是为了PHP开发者想开发C扩展并降低复杂度面打算的。

我们假设你有编程语言的基础。我们会在介绍的时候尽可能的向PHP,C,Javascript等语言的特点来陈述。 如果你懂得这些语言中的某一种的话,我们会指出它们来Zephir的相似点。当然其它的一些Zephir的新特性还有 不同点我们也会一一介绍。

检测安装情况

如果你成功的安装了Zephir,你可以在命令行中执行下面的命令:

$ zephir help

如果安装正确的话,你会看到下面的提示:

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

Zephir version 0.4.5a

Usage:    command [options]Available commands:
    build               Generate/Compile/Install a Zephir extension
    clean               Cleans the generated object files in compilation
    compile             Compile a Zephir extension
    full-clean          Cleans the generated object files in compilation
    generate            Generates C code from the Zephir code    help                Displays this help    init [namespace]    Initializes a Zephir extension
    install             Installs the extension (requires root password)
    version             Shows Zephir version

目录结构

首先我们要做的是建立一个基础的项目结构,它为我们开发扩展提供了基本的结构。这里,我们建立了一个扩展叫做"utils":

$ zephir init utils

执行上面的命令后,一个名为"utils"的目录被建立在当前的目录下:

utils/
   ext/
   utils/

目录 "ext/" (inside utils) 包含了编译器将会用到来编译扩展的代码. 另一个目录是"utils",这个目录的名字必须要和我们的扩展名字保持一至。我们写的Zephir代码将会被放到这里。

We need to change the working directory to "utils" to start compiling our code:

$ cd utils$ ls
ext/ utils/ config.json

列出的目录中,还有一个文件叫做"config.json",这个文件包括了一些配置,它可以用来改变Zephir和扩展的行为。

增加我们的第一个类

Zephir是被设计成开发面向对象扩展的。为了开发出我们的第一个功能,我们增加一个类到扩展中。

就像很多工具和语言一样,第一件事就是去写"hello world"。同时也检测Zephir是不是可以正常运作。 所以我们的第一个类就叫作"Utils\Greeting",它包含了一个函数,这个函数会打印出"hello world!"。

The code for this class must be placed in "utils/utils/greeting.zep":

namespace Utils;class Greeting{

    public static function say()
    {
        echo "hello world!";
    }}

下面开始编译并生成扩展:

$ zephir build

首先,只会在第一次执行的时候,大量的内部命令被执行,并产生了一些必要的代码和配置文件,最终把这个类生成PHP的扩展。 如果一切顺利的话,你将会看到:

...Extension installed!Add extension=utils.so to your php.iniDon't forget to restart your web server

在上面的步骤中,你可能需要提供你的root帐号和密码去安装这个扩展。 最后,这个扩展必须增加到php.ini文件中,以便PHP可以加载它: extension=utils.so

初始化测试

现在这个扩展已经增加到php.ini文件中了,执行下面的命令来确认扩展是否已经正确的加载进来了:

$ php -m[PHP Modules]Core
date
libxml
pcre
Reflection
session
SPL
standard
tokenizer
utils
xdebug
xml

扩展utils必须要出现在上面的列表中。那么现在,我们尝试在PHP中运行这个hello world扩展。 为了完成这个测试,我们写了一个简单的PHP代码来执行扩展中的静态函数:

<?phpecho Utils\Greeting::say(), "\n";

恭喜!,你已经完成你的第一个PHP扩展了。

一些有用的类

"hello world"这个类的扩展是用来检测我们的不幸是否正确的。现在,让我们建立一些其它更有用处的类。

第一个有用的类我们将要增加到PHP扩展中将会提供一个过滤工具给用户。 这个类就叫做"Utils\Filter",这个类的代码必须要放在"utils/utils/filter.zep"中:

这个类的基本的框架如下:

namespace Utils;class Filter{}

这个类包含了一个函数,这个函数的作用是帮助用户去过滤一些不合法的字符。 第一个函数叫做"alpha",它的目标就是去过滤非ascii码的字符。 开始,我们只是简单的打印出字符串的每一个字节:

namespace Utils;class Filter{

    public function alpha(string str)
    {
        char ch;

        for ch in str {
            echo ch, "\n";
        }

    }}

当调用这个函数的时候:

<?php$f = new Utils\Filter();$f->alpha("hello");

You will see:

h
e
l
l
o

检查字符串中的每一个字符是一个直接了当的方法,现在我们建立另一个正确过滤字符的函数:

class Filter{

    public function alpha(string str) -> string
    {
        char ch; string filtered = "";

        for ch in str {
            if (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') {
                let filtered .= ch;
            }
        }

        return filtered;
    }}

这个写好的函数可以像刚才一样测试:

<?php$f = new Utils\Filter();echo $f->alpha("!he#02l3'121lo."); // prints "hello"

下面的视频演示了上面的这些过程:

结论

这是一个简单的指导教程,但是正如你所见到的,使用Zephir你可以很容易的建立一个PHP扩展。 我们建议你继续阅读这个手册,以便你可以了解更多Zephir的特性。


© 著作权归作者所有

共有 人打赏支持
风一样的世界

风一样的世界

粉丝 16
博文 47
码字总数 14443
作品 1
广州
高级程序员
私信 提问
[Zephir官方文档翻译之二] 为什么选择 Zephir?

为什么选择 Zephir? 目前的PHP应用必须使用得稳定性、性能、和功能性保持平衡。 每一个PHP应用是建立在大量的通用组件上的,而这些组件又基于大量的其它应用。 这些通用的组件可能是一个类/...

风一样的世界
2014/09/26
0
0
[Zephir开发实践]用Zephir编写PHP扩展实践

场景描述 首先,还是强烈推荐一下Phalcon这个框架。 由于对这个框架很感兴趣,所以看了其官方文档,并在先前用PHP根据其思想写了两个Phalcon核心类,见链接: #年前福利#Phalcon框架部分核心...

暗夜在火星
2014/06/26
0
0
[Zephir官方文档翻译之四] 安装Zephir

安装Zephir 为了安装Zephir,请根据下面的步骤来做: 预备知识 使用Zephir来编译PHP扩展,下面的一些软件是必须的: gcc >= 4.x/clang >= 3.x re2c 0.13 or later gnu make 3.81 or later au...

风一样的世界
2014/09/26
0
0
[Zephir官方文档翻译之三] 介绍 Zephir

介绍 Zephir Zephir是一种可以让PHP开发者尝试编写和编译可以被PHP执行代码的一种语言。它是动态/静态类型,它的一些特性对于PHP 开发者来说是非常的相似的。 Zephir的名字是取自Zend Engine...

风一样的世界
2014/09/26
0
0
[Zephir官方文档翻译之一] 欢迎来到Zephir!

最新更新请留意我的github: https://github.com/pfdtk/zephir-docs/tree/master/zhcn 欢迎来到Zephir! Zephir 是一个开源的,可以用高级语言安全快速地编写 PHP 的 C 扩展。 Zephir特点 Ze...

风一样的世界
2014/09/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

AWS 为 Elasticsearch 推出开源发行版

AWS 近日宣布为 Elasticsearch 推出开源发行版 Open Distro for Elasticsearch。 Elasticsearch 是一个分布式、面向文档的搜索和分析引擎,它支持结构化和非结构化查询,并且不需要提前定义模...

linux-tao
33分钟前
6
0
spring cloud与spring boot版本对应关系

https://spring.io/projects/spring-cloud 看Release Train Greenwich |2.1.x |- Finchley |2.0.x Edgware |1.5.x Dalston |1.5.x...

Danni3
34分钟前
2
0
开源 java CMS - FreeCMS2.8 数据对象 guestbook

项目地址:http://www.freeteam.cn/ guestbook 在使用留言相关标签时,标签会封装guestbook供页面调用。 属性 说明 id id siteid 所属站点id memberid 留言会员id membername 留言会员名称 ...

freeteam
36分钟前
1
0
【java+selenium】网易云音乐刷累计听歌数

背景 应该是在去年的时候,刷知乎看到一个问题,大概是说怎么刷网易云音乐个人累计听歌数,然后有一个高赞回答,贴了一段js代码,直接在浏览器console执行就可以了。当时试了下,直接一下子刷...

卧颜沉默
38分钟前
3
0
开启阿里云linux下的pure-ftpd被动模式,解决flashfxp可连接但无法下载的问题

由于某个网站的备案出现问题,只能将网站临时迁到香港服务器,原服务器是阿里云的centos系统,ftp服务器是用的pure-ftpd,香港服务器由于历史原因装的是server 2008 32位,ftp软件用的是fla...

我退而结网
39分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部