当前位置 博文首页 > 如何使用Zephir轻松构建PHP扩展

    如何使用Zephir轻松构建PHP扩展

    作者:八重樱 时间:2021-08-23 19:06

    目录
    • 简介
    • 你该安装的第一个扩展
      • Zephir
      • Zephir 安装
    • 结语

      简介

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

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

      你该安装的第一个扩展

      Zephir

      官网文档给出的定义是:

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

      特点:

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

      工作原理?

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

      下面是编译方案的例子:

      编译方案

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

      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 版本:

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

      然后

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

      cd zephir

      ./install -c

      验证是否安装正确:

      zephir help

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

      扩展初始化:

      zephir init helloworld

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

      扩展目录结构:

      • 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

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

      zephir build output

      检测下是否安装成功:

      在 PHP 代码中测试:

      zephir_helloworld.php

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

      接下来运行命令:

      php zephir_helloworld.php

      你可以可以看到输出

      Hello World!

      结语

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

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

      jsjbwy