zephir-(3)你的第一个PHP拓展

zephir-你的第一个PHP拓展

前言

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

在之前的介绍中大家不仅了解了zephir具体是一个什么样的语言,也get到了它的安装方式,成功安装到自己的系统上了.今天让我们来一同编写之前我们演示过的一些拓展让我们来一同动起手来尝试一下.

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

附上:

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

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

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

1. 第一个拓展

Zephir和这本书(官方文档和此译文讲解)的目的是为PHP开发人员想要用较低的复杂性创建c扩展。

假设你有一个或多个其他编程语言的经验,我们将指出zephit和PHP中,C、Javascript和其他语言有很多相似的特性,以及新的或不同的许多特性。

如果你已经成功安装Zephir,你必须能够在您的控制台执行以下命令:

$ zephir help

如果一切都好,你应该在你的屏幕上看到以下帮助信息.

1.1 扩展框架

我们要做的第一件事就是生成一个扩展框架,这将提供给我们扩展的基本 我们需要开始工作的结构。 在我们的例子中,我们将创建一个扩展名为“utils”:

$ zephir init utils

执行之后,一个目录称为“utils”创建在当前工作目录:

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

目录“ext/”包含将要由编译器用于产生扩展的代码。创建的另一个目录是“utils”,在utils目录下面还有一个utils目录,我们将我们编写的Zephir代码放在在这个目录中。

目录列表也将向我们展示一个文件称为“config.json”,该文件包含配置设置 我们可以用它来改变Zephir扩展的行为以及一些扩展信息。

1.2 我们的第一节课

Zephir生成面向对象的扩展。开始开发,我们需要给我们的一个类添加到扩展功能。

正如在许多语言/工具,我们要做的第一件事就是写一个“Hello World”对zephir进行检查,因此,我们的第一个类将被称为“Utils\Greeting”,它包含的方法打印“hello world!”.。

这个类的代码必须被放置在“utils/utils/greeting.zep”:

namespace Utils;

class Greeting
{

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

}

现在,我们需要告诉Zephir编译和生成的扩展,必须在根目录:

$ zephir build

当然我们在编译中可能遇到很多问题比如:

PHP Warning:  shell_exec().....

这是应为php.ini没有打开这些函数导致无法使用这些函数,我们找到disable_functions = 然后去掉后面的exec和shell_exec,passthr,systemzephir的编译依赖于这些函数

还有可能可能会看到如下提示:

error: re2c is not installed

这是应为没有安装re2c拓展,执行如下语句安装:

wget http://downloads.sourceforge.net/project/re2c/0.15.3/re2c-0.15.3.tar.gz
tar zxf re2c-0.15.3.tar.gz && cd re2c-0.15.3
./configure
make && make install

如果一切顺利,您将看到以下消息 的输出:

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

最后,必须添加到php扩展。 php.ini中加入extension=utils.so。

现在,添加到您的php扩展。 ini,检查是否正常加载扩展通过执行以下:

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

扩展“utils”必须的一部分输出表明扩展是正确加载。 现在,让我们看看我们 “hello world”直接执行的PHP。 为此,您可以创建一个简单的PHP文件调用静态方法 刚刚创建的:

<?php

echo Utils\Greeting::say(), "\n";

恭喜你! ,你第一次上运行PHP扩展。

2 一个有用的类

“hello world”类很好检查如果我们的环境是对的,现在,让我们创建一些更有用的类。

第一个有用的类,我们要添加此扩展将为用户提供过滤设备。 这个类被称为“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");

你会看到:

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.");

3. 总结

这是一个非常简单的教程,你可以看到,很容易使用Zephir开始构建扩展,后面我们更深入的学习会和所有语言一样从最基础变量语法开始,一步一步深入,最后多谢大家的支持!

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

时间: 2024-09-22 20:10:47

zephir-(3)你的第一个PHP拓展的相关文章

一个Chrome拓展——HttpPost

周末花了点时间做了一个chrome拓展,叫HttpPost,顾名思义是用来测试http的post请求. 先直接看效果 插件与拓展 在说这个做的过程前,先说明什么是Chrome插件.Chrome拓展 1.开发语言区别 拓展:HTML + Javascript  插件:理论上可以用任何一种生成二进制程序的语言,比如 C/C++ 2.功能上区别 拓展:通过调用Chrome提供的Chrome API扩展浏览器功能的一种组件  插件:调用Webkit内核NPAPI来扩展内核功能的一种组件 3.层次区别 拓

基于PhalApi的Smarty拓展

基于PhalApi的Smarty拓展 前言 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架. 用过的童鞋都知道PhalApi是一个Api框架不提供view层的功能,但是很多童鞋有开发一个自己管理自己API的web界面的需求,或者是个人后台,那么是否意味着要去在学习另外一种框架来实现呢?当然不是在之前也有童鞋放出过一个View拓展,使用之后还是有一些不方便的地方,所以引入一个比较老牌的PHP模版引擎Smarty来解决这类问题,本拓展提供了对Smarty的封

SNS:关系拓展还是关系维系

本文系我在知乎中参与一个关于六度分隔理论与SNS的相关问答讨论时提出的一些看法,因知乎无法长篇大论,因此,在这里进行了一些补充,并发表一篇博客.全文如下: 六度分隔理论指人际网络中任意两个节点通过网络中的相互关联的其他节点而产生联系的最少链接数量.这是一个不同关系纽带转换和传递的过程.这个理论的一个基本假设是网络中任意两个节点没有直接的链接(也就是不存在一个直接的关系纽带).现实的社交网络中,这种情况是普遍存在的.在互联网中,这种情况也存在,但因其网络本身开放性的特点,建立直接链接的可能性,

SNS—-关系拓展还是关系维系?

本文系我在知乎中参与一个关于http://www.aliyun.com/zixun/aggregation/12932.html">六度分隔理论与SNS的相关问答讨论时提出的一些看法,因知乎无法长篇大论,因此,在这里进行了一些补充,并发表一篇博客.全文如下: 六度分隔理论指人际网络中任意两个节点通过网络中的相互关联的其他节点而产生联系的最少链接数量.这是一个不同关系纽带转换和传递的过程.这个理论的一个基本假设是网络中任意两个节点没有直接的链接(也就是不存在一个直接的关系纽带).现实的社

白酒在中国依然是一个巨大的市场

尽管销量快速增长的红酒吸引了更多的目光,但白酒在中国依然是一个巨大的市场,在所有酒类的销售额中占到将近70%的比例. 过去的十年是白酒业的黄金十年,这其中当然少不了政府的贡献--让它产生了些许泡沫,而在禁止三公消费之后,未来得及准备的白酒公司们一下子跌入寒冬.2013年,白酒成为表现最差的股票板块,A股的前10大跌幅中,白酒股就占了4个. 对于以白酒为主的电子商务网站酒仙网来说,这一切却是巨大的机会. 2014年4月2日,酒仙网宣布获得两轮共4.25亿元投资的消息,分别是2013年底1.65亿元

zephir-(9)类和对象2

zephir-(9)类和对象2 前言 先在这里感谢各位zephir开源技术提供者 zephir全面使用对象编程,这就是为什么拓展的使用方式只能是方法和类,你也将看到,大部分的时间,运行时错误引发异常,而不是致命错误或警告.今天讲一步步讲解zephir类方法变量范围等等的使用,希望大家喜欢. 注:笔者水平有限,说的不正确的地方希望大家多多指正,一同交流技术 附上: 喵了个咪的博客:w-blog.cn zephir官网地址:http://zephir-lang.com/ github地址:https

15招PHOTOSHOPCC功能手册

  ps的新版本已经出来有一阵子了,今年2013年上半年,优设曾多次推荐过cc的一些新功能,如果您还没有使用新版,今天我们继续和您来聊聊更新的一些理由. 这个新版本名叫Photoshop CC ,它不仅与After Effects CC 和 Illustrator CC保持友好和睦互通有无的关系,还找到了一个新朋友Behance.那么今天我们就为大家介绍一下其中的十五个新功能,如果你想用这个版本,最好提前来看看. 01. 与Behance连通 当你加入ps cc(全拼creative cloud

使用 Rust 创建 PHP 扩展

去年十月,我和 Etsy 的同事有过一个关于如何为像PHP样的解释性语言写拓展的讨论,Ruby或Python目前的状况应该会比PHP容易.我们谈到了写一个成功创建扩展的障碍是它们通常需要用C来写,但是如果你不擅长C这门语言的话很难有那个信心. 从那时起我便萌生了用Rust写一个的想法,过去的几天一直在尝试.今天上午我终于让它运行了. C或PHP中的Rust 我的基本出发点就是写一些可以编译的Rust代码到一个库里面,并写为它一些C的头文件,在C中为被调用的PHP做一个拓展.虽然并不是很简单,但是

Uber数据基础架构现在及未来

优步是全球领先的移动互联网创业公司,通过创新科技为乘客和合作司机高效即时匹配,提供安全.高效.可靠.便利的出行选择,他的使命是"使出行如自来水一样可靠,每个人在任何地方都能享用".为了履行这一承诺,优步依赖于在每个层面做出数据驱动的决策. 优步目前的业务广泛分布于75个国家或地区,超过500个城市,基于分析可以充分了解一个城市人们出行的特点(热点区域.主要交通流向等).大部分的决策都得益于更快的数据处理能力,其底层核心在于构建了强大的Hadoop大规模数据处理平台.下面对Hadoop在