Zephir入门

字号+ 编辑: 种花家 修订: 种花家 来源: open开发经验库 2023-09-15 我要说两句(0)

当年php火的时候, 多少内卷大佬巴不得使用c来编译一手php插件, 从此制霸江湖啊!zephir作为phalcon框架所生的一个分支语言,给很多想写php框架又不想看zend API文档的同学们带来了方便实惠。

Zephir是一个开源的用于简化PHP扩展的创建和维护的语言。它使得不擅长C/C++的PHP开发人员也能写出PHP扩展。Zephir是Zend Engine/PHP/Intermediate缩写,读音为zephyr。

Zephir在语法上跟PHP有很多相似之处,PHP开发人员可以很快上手,但也有很多地方上的不同需要我们去学习。下面是Zephir一些主要的特色:

  • 变量类型:动态/静态

  • 内存安全:不允许指针和直接的内存管理

  • 编译模型:AOT(ahead of time)

  • 内存模型:task-local垃圾回收

安装详解

依赖

要使用Zephir和编译出一个PHP扩展,需要先安装以下的依赖:

  • gcc >= 4.x/clang >= 3.x

  • re2c 0.13+

  • gnu make 3.81+

  • autoconf 2.31+

  • automake 1.14+

  • libpcre3

  • php development headers and tools

安装

这里选择使用git的方式获取源代码并进行安装:

bash$ git clone https://github.com/phalcon/zephir
$ cd zephir
$ ./install-json
$ ./install -c

如果已经安装了json-c,那么可以忽略./install-json这一步。

验证

通过运行zephir命令验证下是否安装成功:

bash$ zephir help
 _____	      __    _
/__  /  ___  ____  / /_  (_)____
  / /  / _ \/ __ \/ __ \/ / ___/
 / /__/  __/ /_/ / / / / / /
/____/\___/ .___/_/ /_/_/_/
	 /_/
Zephir version 0.7.1b
Usage: 
	command [options]
Available commands:
	stubs	       Generates extension PHP stubs
	install	     Installs the extension (requires root password)
	fullclean	   Cleans the generated object files in compilation
	build	       Generate/Compile/Install a Zephir extension
	generate	    Generates C code from the Zephir code
	clean	       Cleans the generated object files in compilation
	builddev	    Generate/Compile/Install a Zephir extension in development mode
	compile	     Compile a Zephir extension
	version	     Shows the Zephir version
	api [--theme-path=/path][--output-directory=/path][--theme-options={json}|/path]Generates a HTML API
	help		Displays this help
	init [namespace]    Initializes a Zephir extension
Options:
	-f([a-z0-9\-]+)     Enables compiler optimizations
	-fno-([a-z0-9\-]+)  Disables compiler optimizations
	-w([a-z0-9\-]+)     Turns a warning on
	-W([a-z0-9\-]+)     Turns a warning off

我们的第一个扩展

下面我们使用Zephier来创建一个“hello world”扩展。

初始化

首先,我们使用init命令来初始化扩展的基本结构(假设我们扩展的名称为“utils”):

bash$ zephir init utils

成功运行后,我们应该会得到如下的目录结构:

bashutils/
   ext/
   utils/

ext目录里放的是编译器需要用到的代码,不用理会,我们的Zephir代码将放在跟扩展名同名的utils里。

编写代码

我们在utils目录下创建一个文件:greeting.zep,并编写代码:

phpnamespace Utils;
class Greeting
{
	public static function say()
	{
		echo "hello world!";
	}
}

这里不深入Zephir的语法,但是可以看到语法跟PHP很类似,上面的代码定义了一个类Greeting和一个方法say()。

Zephir的语法详情可以参考官方的文档: http://zephir-lang.com/language.html 。

编译

接下来,我们回到utils根目录下并运行build命令编译出扩展:

bash$ zephir build     
Preparing for PHP compilation...
Preparing configuration file...
Compiling...
Installing...
Extension installed!
Add extension=utils.so to your php.ini
Don't forget to restart your web serverp

编译成功后,我们在PHP配置文件里增加以下一行:

iniextension=utils.so

验证

通过如下命令查看我们的扩展是否正常加载:

bashphp -m
[PHP Modules]
...
memcached
mysql
mysqli
mysqlnd
openssl
utils
...

如果看到我们扩展的名字,则证明已成功加载。

然后我们在PHP里调用say()方法:

<?php

echo Utils\Greeting::say(), "\n";

正常的话会输出:hello world!。至此我们也完成了我们的第一个扩展。

参考文档

http://zephir-lang.com/index.html

阅完此文,您的感想如何?
  • 有用

    0

  • 没用

    0

  • 开心

    0

  • 愤怒

    0

  • 可怜

    0

1.如文章侵犯了您的版权,请发邮件通知本站,该文章将在24小时内删除;
2.本站标注原创的文章,转发时烦请注明来源;
3.Q群: 2702237 13835667

相关课文
  • mac开发接入微信公众号接口返回报错 cURL error 56: SSLRead() return error -9806

  • PHP的换行符是什么

  • pecl安装程序时报错Array and string offset access syntax with curly braces is no longer supported

  • 由于商家传入的H5交易参数有误,该笔交易暂时无法完成,请联系商家解决

我要说说
网上嘉宾点评