宁泽林_NiZerin - 互联网技术博客

  • PHP
  • Go
  • Java
  • Rust
  • Python
  • 交流群
  • 关于我
  • 留言版
  1. 首页
  2. PHP
  3. 正文

[译]使用 Zephir 轻松构建 PHP 扩展

2019年3月21日 10655点热度 0人点赞 9条评论

简介:

通过 PHP 扩展, 我们可以在 php 代码中使用一些特定的方法(大部分的 php 扩展都是用 C 写的)。

比如,在 PHP 中需要与 SQLite3 交互,我们可以自己写方法与之进行连接,再写 SQL 语句请求数据。然而,这都是些既琐碎又重复度相当高的工作,因此,所有开发者对插件的需求呼之欲出。

现在,这款插件已经诞生了。你只需像安装其他扩展一样进行安装,然后在 'php.ini' 文件执行 'extension=sqllite3.so',就可以在你的 php 项目里对 sqlite3 进行访问了。

你该安装的第一个扩展

Zephir:

官网文档给出的定义是:

一种开源的高级语言,旨在简化 PHP 扩展的创建和可维护性,重点关注类型和内存安全性。

特点:

  • 类型:动态 / 静态。
  • 内存安全性:不允许指针或者直接内存管理。
  • 编译模式:提前编译。
  • 内存模型:本地任务垃圾回收机制。

工作原理?

把你写好的 php 代码编译成 c,然后你可以将其以扩展的形式添加到 'php.ini' 文件中。

下面是编译方案的例子:

file

编译方案

  • 让我们从 Hello world 的扩展开始吧。
file

Zephir 安装

配置要求 :

  • gcc >= 4.x/clang >= 3.x
  • re2c 0.13 or later
  • gnu make 3.81 or later
  • autoconf 2.31 or later
  • automake 1.14 or later
  • libpcre3
  • php development headers and tools
  • re2c
  • php-zephir-parser

如果你是用 Ubuntu, 可以采取如下方式安装:

sudo apt-get update
sudo apt-get install git gcc make re2c php7.0 php7.0-json php7.0-dev libpcre3-dev

参考下图命令,确认安装了较新的 PHP 版本:

file

参考下图命令,确认有 PHP 开发库:

file

然后

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

cd zephir

./install -c

验证是否安装正确:

zephir help

如果一切就绪,你应该能在你的屏幕上看到以下帮助信息:

file

扩展初始化:

zephir init helloworld

然后,一个名字为 “helloworld” 的目录在当前工作目录中被创建:

file

扩展目录结构:

  • ext: 包含被编译器用来生成扩展的代码。
  • helloworld: 这个目录与我们的扩展同名。我们在这个目录中放置 Zephir 代码。
  • config.json: 这个文件包含我们可用于更改 Zephir 与/或此扩展的行为的配置

添加我们的第一个类:

在 helloworld 目录中 .

Zephir 的设计初衷是用来生成面对对象的扩展,接下来我们先添加一个初始类。

我们先来在扩展中创建一个 helloworld 类,使用此类来渲染 Hello World!。

helloworld/helloworld/greeting.zep

namespace HelloWorld;
class Greeting
{
    public static function say()
    {
        echo "Hello World!";
    }
}

接下来命令行执行以下命令来编译扩展:

zephir build

第一次运行以上命令时,会初始化一些东西。如果一些顺利的话,会输出以下内容:

file
zephir build output

检测下是否安装成功:

file

在 PHP 代码中测试:

zephir_helloworld.php

<?php
echo HelloWorld\Greeting::say()."\n";

接下来运行命令:

php zephir_helloworld.php

你可以可以看到输出 Hello World!

结语

如果你是 PHP 软件工程师,对内存管理等底层语言的编程方式不是特别熟悉,可以尝试从 Zephir 开始写一些简单的扩展。

Zephir 内部已经做好了内存管理,但是基于其内存安全的设计,你无法使用 C 语言的强大手动内存管理功能,如果你是 C 程序员,你会觉得 Zephir 更加简单易用,但是在有些地方可能不够强大。

原文地址:https://medium.com/tech-tajawal/introduc...

译文地址:https://learnku.com/php/t/25350

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: php translations
最后更新:2019年3月21日

NiZerin

博主已经躺平了,后面很少会更新博客。

打赏 点赞
< 上一篇
下一篇 >

文章评论

  • I'M LZQ

    666

    2019年3月21日
    回复
    • I'M LZQ

      @I'M LZQ 7777

      2019年3月21日
      回复
    • 吖远zzy

      @I'M LZQ 99999

      2019年8月20日
      回复
  • I'M LZQ

    8888

    2019年3月21日
    回复
    • I'M LZQ

      @I'M LZQ 666

      2019年3月21日
      回复
    • 仅此、而已

      @I'M LZQ 哈哈

      2019年4月2日
      回复
  • NiZerin

    测试

    2019年4月27日
    回复
  • 临风倚穆兰

    66666

    2019年7月2日
    回复
  • 吖远zzy

    55555

    2019年8月20日
    回复
  • razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
    回复 I'M LZQ 取消回复

    分类
    • Angular
    • CSS3
    • docker
    • Flutter
    • git
    • Go
    • H5
    • Java
    • JavaScript
    • Laravel
    • linux
    • Node.js
    • PHP
    • Python
    • React
    • redis
    • Vue.js
    • windows
    • WordPress
    • 交流
    • 小程序
    • 工具
    • 网站公告
    标签聚合
    php go flutter translations wordpress laravel javascript vue
    友情链接
    • PHP函数字典
    • 宝塔运维特惠
    • 科学上网
    • 阿里云特惠

    COPYRIGHT © 2021 nizer.in. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang