专栏首页喵了个咪的博客空间zephir-(3)你的第一个PHP拓展

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开始构建扩展,后面我们更深入的学习会和所有语言一样从最基础变量语法开始,一步一步深入,最后多谢大家的支持!

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

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

感谢zephir开发人员:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PHP 霸主地位被动摇,JIT 是穷途末路后的绝地反击?

    关键时刻,第一时间送达! 摘要:PHP 是 Web 开发最常用的语言,自创建以来,PHP 语言经历了许多激烈的改进,其中性能是开发人员在评估新版本时考虑的主要标...

    企鹅号小编
  • 初学者福利:XVWA黑客靶场发布

    简介 Xtreme Vulnerable Web Application (XVWA)是一款使用PHP/MySQL编写的靶场,可以帮助初学者快速学习安全姿势。 ...

    FB客服
  • 修改UCenter用户名长度限制的方法php程序和数据库修改

    做了discuz api for java  第三方应用项目的注册登陆。 但是在修改用户名长度的时候。出现了小bug。找到解决发现是自身原因。 ? 在discu...

    小帅丶
  • 微信企业号二次开发--自定义菜单接口开发--应用中心

    https://zb.oschina.net/market/opus/1444646_161 代码 1.注册完微信企业号,需要扫描二维码。就出现输入账号和密...

    小帅丶
  • svn自动检出修改的文件列表

    开发完一个功能,我们需要把该功能修改的所有文件找出来,增量更新到发布环境,如果使用svn log查看svn记录,没有排重,信息比较详细,不容易筛选,这样将会花费...

    wangxl
  • 跨平台版中国菜刀Cknife发布

    Burp已经成了绿帽子门必不可少的工具,相信大家都装有Java环境,本软件支持1.7+以及所有安装了环境的系统。1.6后续会考虑兼容。 一直都有想写一款真正...

    FB客服
  • 提高代码可读性的10个技巧

    以下为译文: 如果你的代码很容易阅读,这也会帮助你调试自己的程序,让工作变得更容易。 代码可读性是计算机编程领域的一个普遍课题,这也是作为开发人员首先要学习的...

    CSDN技术头条
  • 打狗棒法之:Cknife(C刀)自定义模式秒过安全狗

    免责声明:本站提供安全工具、程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负! 0x00 前言 很多朋友在使用Cknife时都误以为她只是菜刀的跨平...

    FB客服
  • CVE-2018-5711:一张GIF图片就能让服务器宕机的PHP漏洞

    最近,台湾Web漏洞挖掘大牛Orange Tsai在对一些Web开发框架和程序实现模块进行安全审核的过程中,发现了一些有意思的漏洞。就比如说,这个PHP的CVE...

    FB客服
  • PHP代码安全杂谈

    虽然PHP是世界上最好的语言,但是也有一些因为弱类型语言的安全性问题出现。WordPress历史上就出现过由于PHP本身的缺陷而造成的一些安全性问题,如CVE-...

    FB客服

扫码关注云+社区

领取腾讯云代金券