用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 HelloWorldGreeting::say()."n";
运行以下命令,
php zephir_helloworld.php
您的输出应该是以下Hello World!
结论:
如果你是软件工程师,php开发人员需要开发和使用php如何工作以及如何构建自己的扩展我建议zephir有一个非常强大的文档和felxability也是它的内存安全管理。但是由于它有一些限制,根据以下Zephir被设计为安全,所以它不实现指针或手动内存管理,所以如果你是一个C程序员,你会觉得Zephir不如C强大但比C更友好。
- Linux进程间通信(一) - 管道
- Linux进程间通信(二) - 消息队列
- Linux进程间通信(三) - 信号
- 我的WCF之旅(7):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承
- Linux进程间通信(IPC)机制总览
- 负载均衡 - 综述
- 浅谈ASP.NET的Postback
- WCF版的PetShop之一:PetShop简介[提供源代码下载]
- 维吉尼亚密码及程序实现
- 迪菲-赫尔曼密钥交换
- 分布式系统组件之配置中心
- github 提交报403 forbidden的错误解决
- Apache thrift - 使用,内部实现及构建一个可扩展的RPC框架
- redis主从集群搭建及容灾部署(哨兵sentinel)
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- Go的CSP并发模型实现:M, P, G
- Golang依赖管理工具:glide从入门到精通使用
- Redis的Multi的内幕真相
- shell expect权威指南和实战
- 3种方式限制ip访问Oracle数据库
- 服务发现之consul的介绍、部署和使用
- Mybatis处理查询map 为null 导致查询map无该key对象
- 深入对比TOML,JSON和YAML
- consul配置参数大全、详解、总结
- 跳跃表原理和实现
- 你动、蒙娜丽莎跟着一起动,OpenCV这么用,表情口型造假更难防了
- 好用的PHP高性能多并发restful的HTTP Client
- Golang程序调试工具介绍(gdb vs dlv)
- tcp_tw_reuse、tcp_tw_recycle注意事项
- PHP性能规范