用PHP写PHP7扩展,超级简单对吧!
【图片打不开,请用代理】
介绍:
PHP扩展是编译库,它允许在您的PHP代码中使用特定的功能(主要是使用C编写的php扩展)。
例如,您需要使用PHP使用SQLite3,您可以实现自己的方法和功能来连接到Sqlite3,从您的应用程序级别向DB进行查询,但这不是一项简单的任务,插件不仅是您自己的要求,但其他开发人员需要做类似的事情。
所以有人开发了它并将其作为php扩展发送,您可以安装此扩展并php.ini
使用以下内容启用它extension=sqllite3.so
,并且您可以通过您的应用程序级别访问所有sqlite3功能,在这种情况下是php。
你的第一次扩展
ZEPHIR:
根据zephir官方文档,您可以将其定义如下
一种开源的,高级/域特定的语言,旨在简化PHP扩展的创建和可维护性,重点关注类型和内存安全性。
特征:
- 输入 系统:动态/静态。
- 内存安全:不允许使用指针或直接内存管理。
- 编译模型:提前。
- 内存模型:任务本地垃圾收集。
这个怎么运作 ?
您编写PHP代码并将您的代码编译为c扩展名,最后您可以将其添加到您的php.ini
文件中。
这是编译方案的例子:
编制方案
- 让我们以Hello world扩展为例。
Zephir安装
要求 :
- gcc> = 4.x / clang> = 3.x
- re2c 0.13或更高版本
- gnu make 3.81或更高版本
- autoconf 2.31或更高版本
- automake 1.14或更高版本
- libpcre3
- php开发标题和工具
- re2c
- PHP-ZEPHIR解析器
如果您使用的是Ubuntu,则可以通过以下方式安装所需的软件包:
sudo apt-get update
sudo apt-get install git gcc make re2c php7.0 php7.0-json php7.0-dev libpcre3-dev
由于Zephir是用PHP编写的,因此您需要安装最新版本的PHP 7.2,并且必须在您的控制台中使用它。
此外,请确保您还安装了PHP开发库以及PHP安装。
脚步
git clone https://github.com/phalcon/zephir
cd zephir
./install -c
验证您的安装
zephir帮助
如果一切顺利,您应该在屏幕上看到以下帮助:
扩展骨架:
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我们的项目必须编译并生成扩展:
zephir build
最初,并且只是第一次执行许多内部命令,生成必要的代码和配置以将此类导出到PHP扩展,如果一切顺利,您将在输出的末尾看到以下消息:
zephir构建输出
安装验证:
从PHP测试您的扩展:
<?php
echo HelloWorld\Greeting::say()."\n";
运行以下命令,
php zephir_helloworld.php
您的输出应该是以下Hello World!
结论:
如果你是软件工程师,php开发人员需要开发和使用php如何工作以及如何构建自己的扩展我建议zephir有一个非常强大的文档和felxability也是它的内存安全管理。但是由于它有一些限制,根据以下Zephir被设计为安全,所以它不实现指针或手动内存管理,所以如果你是一个C程序员,你会觉得Zephir不如C强大但比C更友好。
参考文献:
用PHP写PHP7扩展,超级简单对吧!的更多相关文章
- 3分钟wamp安装redis扩展超级简单
windows10(win8.1等系统应该是一样的) wampserver2.5 -Apache-2.4.9-Mysql-5.6.17-php5.5.12-64b 很简单只需要3步,主要是安装redi ...
- 超级简单的jQuery纯手写五星评分效果
超级简单的评分功能,分为四个步骤轻松搞定: 第一步: 引入jquery文件:这里我用百度CDN的jquery: <script src="http://apps.bdimg.com/l ...
- Linux C语言写的超级简单port扫描器
这个本来曾经也写过的,今天无聊复习下 再写一遍.简单的一塌糊涂,写的不咋地大家见谅哦!有空再加强 嘿嘿! #include <stdio.h> #include <stdlib.h& ...
- 利用PHP SOAP扩展实现简单Web Services
原文:利用PHP SOAP扩展实现简单Web Services WebServices能干什么? WebServices 可以将应用程序转换为网络应用程序. 通过使用 WebServices,您的应用 ...
- react-devtools超级简单安装教程
有时候看网上各路大神,写如何安装react-devtools,大神就是大神,好多步骤一笔带过,导致一些学习者看的一脸懵逼,今天我给大家讲超级简单的react-devtools安装步骤,相信看过的小伙伴 ...
- JS基础(超级简单)
1 JS基础(超级简单) 1.1 数据类型 1.1.1 基本类型: 1) Number:特别注意:NaN的检测方法:Nan!=NaN;或者使用isNaN方法 2) ...
- JavaScript,一个超级简单的方法判断浏览器的内核前缀
先说明,此处的方法是说超级简单的方法,不是指代码超级少,而是用非常简单的知识点,只要懂得怎么写JavaScript的行内样式就可以判断. 大家应该还记得JavaScript行内样式怎么写吧?(看来我是 ...
- zw版_Halcon图像交换、数据格式、以及超级简单实用的DIY全内存计算.TXT
zw版_Halcon图像交换.数据格式.以及超级简单实用的DIY全内存计算.TXT Halcon由于效率和其他原因,内部图像采用了很多自有格式,提高运行速度,但在数据交换方面非常麻烦. 特别是基于co ...
- 哈,又一款超级简单的队列(MQ)实现方案来了~
开源的消息队列已经很多了,但大部分很重,实际环境下,很多可能只是使用到了一点功能而已,杀鸡使用牛刀,着实有些浪费了.很多时候,我们只想要一片绿叶,但它们给了我们整个的春天,很难消化.本着DIR精神, ...
随机推荐
- Freemarker的简单demo
第一步.导入依赖 <dependency> <groupId>org.freemarker</groupId> <artifactId>freemark ...
- rust数据类型
fn main() { //char支持4个字节,支持emoji let jp = "ゆ"; let emoji = "✨"; let ch = "囧 ...
- [Beta]第三次 Scrum Meeting
[Beta]第三次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/5/7 22:00 30min 大运村公寓6F寝室 附Github仓库:WEDO 例会照片 工作情况总 ...
- arcpy实例教程-地图范围导出到要素类
arcpy实例教程-地图范围导出到要素类 商务合作,科技咨询,版权转让:向日葵,135-4855_4328,xiexiaokui#qq.com 功能:将当前地图范围导出到内存要素类 描述:将当前地图的 ...
- 命令mark
for i in `sudo /usr/local/sbin/fping -g 10.181.37.0/26 -p 10 -r 1 | grep alive | awk '{print $1 }'`; ...
- 【linux】CentOS: Sudo: unable to initialize policy plugin
背景: 在centos7 下 使用sudo 命令对www用户生成ssh秘钥 .报错 解决办法: yum remove sudo yum install sudo 在执行就ok了
- mysql之各版本rpm包安装
发现每次想用mysql的rpm包直接安装的时候,都会出现找不到对应的rpm包的情况,故记录一下查找过程 进入官网->downloads->community->mysql commu ...
- [LeetCode] 213. House Robber II 打家劫舍 II
Note: This is an extension of House Robber. After robbing those houses on that street, the thief has ...
- 流程图软件Microsoft Visio
简介 Visio是一款能处理复杂信息.系统和流程进行可视化.分析和交流的软件,从“office 2003”以后,Visio作为一个单独软件发行,不再集成于office办公软件. 下载安装 官方下载最新 ...
- PHP设计模式 - 模板方法模式
模板模式准备一个抽象类,将部分逻辑以具体方法以及具体构造形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现.先制定一个顶级 ...