简介:

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

比如,在 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 HelloWorldGreeting::say()."n";

接下来运行命令:

php zephir_helloworld.php

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

结语

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

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

文章转自:https://learnku.com/php/t/25350
更多文章:https://learnku.com/laravel/c/translations

php 创建目录_使用 Zephir 轻松构建 PHP 扩展相关推荐

  1. 使用 Zephir 轻松构建 PHP 扩展

    简介: 通过 PHP 扩展, 我们可以在 php 代码中使用一些特定的方法(大部分的 php 扩展都是用 C 写的). 比如,在 PHP 中需要与 SQLite3 交互,我们可以自己写方法与之进行连接 ...

  2. aws架构_如何使用AWS构建可扩展架构

    aws架构 What I learned building the StateOfVeganism ? 我学到的建立素食主义的方法是什么? By now, we all know that news ...

  3. python mysql扩展_关于python:构建’_mysql’扩展错误:无法找到vcvarsall.bat

    我正在尝试通过pip mysql安装python 3.5. 我发现我有丢失的文件,vcvarsall.bat in "C: Program Files(x86) Microsoft Visu ...

  4. winserver2016 401您无权使用所提供的凭据查看此目录或页面_不用找了,30分钟帮你搞定使用 Spring Cloud 和 Docker 轻松构建微服务架构!...

    点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐] [编者的话]如何使用Spring Boot.Spring Cloud.Docker和Netflix的一些开源工具来构建一个微服务架构.本文 ...

  5. iis7 您无权使用所提供的凭据查看此目录或页面。_使用 Spring Cloud 和 Docker 轻松构建微服务架构!...

    点击蓝色"架构文摘"关注我哟 加个"星标",每天上午 09:25,干货推送! 原文:https://dzone.com/articles/microservic ...

  6. 闪亮蔚蓝_在R中构建第一个闪亮的Web应用

    闪亮蔚蓝 数据科学 (DATA SCIENCE) Do you want to make your R code publicly available for others to use? If yo ...

  7. c++图的创建_使用 Amazon Neptune 构建基于图数据库的应用

    在社交网络.推荐引擎和欺诈检测等应用场景中,您需要在数据之间创建关系并快速查询这些关系,此时,图数据库将比关系数据库更具优势.因为使用关系数据库构建这些类型的应用程序面临着许多挑战.您将需要创建多个具 ...

  8. 云信小课堂|简单五步,轻松构建本土「Clubhouse」

    Vol. 2 最近 Clubhouse 一码难求,获得众多互联网圈和投资圈人士的关注,一时之间风靡全球. 但受限于各方面原因,Clubhouse 目前还是存在很多限制,比如采用邀请机制.只能 iOS ...

  9. 一行 Python 代码轻松构建树状热力图

    今天和大家一起学习一种可视化技术:构建树状热力图treemap.树形图易于可视化,且易于被人理解.树状图通过展示不同大小的矩形,以传达不同大小的数据量,一般认为,较大的矩形意味着占总体的一大部分,而较 ...

最新文章

  1. ESLint问题记录
  2. 人群计数--Single-Image Crowd Counting via Multi-Column Convolutional Neural Network
  3. vue2.0 + element ui 实现表格穿梭框
  4. c语言每瓶啤酒2元答案,【原创源码】C语言 一个喝啤酒小游戏的编程实现(菜鸟级)...
  5. 文件目录遍历的并发算法
  6. 计算机职称在线考试报名系统,计算机职称考试报名时间及入口2021年9月
  7. ug冲模标准件库_昆山兴模lt;携手gt;武汉益模,打通冲模“智能设计+精益管理”的最后一道关卡...
  8. python画锯齿波_用Python控制硬件35-自制二三十元成本的信号测量采集控制系统
  9. STM32 - CubeMX 的使用实例详细(04.1)- STM32F103的 - 定时器设定详细解释 - PWM波的产生 - 频率占空比的设定 - 软件代码分析
  10. 坑爹的公交卡充值的流程
  11. ConfigParser.InterpolationSyntaxError: ‘%‘ must be followed by ‘%‘ or ‘(‘, found: “%‘“
  12. Codeforces Edu Round 64 (Rated for Div. 2)
  13. 人工智能应用在会计工作中的优势
  14. VS2017使用教程(使用VS2017编写C语言程序)
  15. Iframe中,弹出层屏幕垂直居中
  16. 品致教您如何选择合适的电流探头
  17. 大学教编程的老师为何不去当高收入的程序员?
  18. 最全华为ensp路由器启动失败错误代码40怎么办?
  19. [SDOI2009]虔诚的墓主人
  20. 2017年4月蓝桥杯模拟题

热门文章

  1. 【华为云实战开发】4.如何使用TortoiseGit进行云端代码托管
  2. 某学校有计算机主机1300台,网络互联技术与实践第14章:构建基于静态路由的多层网络.ppt...
  3. Java NIO AIO编程
  4. leetcode24题:两两交换链表的节点
  5. 特征工程系列学习(一)简单数字的奇淫技巧
  6. 【rabbitmq安装教程】centos7下安装rabbitMQ
  7. Apollo使用指南(二)公共组件接入指南
  8. latex参考文献BibTeX的使用方法
  9. angular监听输入框值的变化_如何检测Angular中@Input()值何时发生变化?
  10. mysql with parser_三十分钟成为 Contributor | 提升 TiDB Parser 对 MySQL 8.0 语法的兼容性...