当前位置: 首页 > 工具软件 > Zephir > 使用案例 >

zephir mysql_用Zephir编写php扩展库以及生成文档、IDE提示

贺宝
2023-12-01

Zephir安装

前置条件

根据官方文档,安装和使用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

如果是ubuntu/debian/deepin等发行版就好办了

$ sudo apt-get update

$ sudo apt-get install git gcc make re2c php7.0 php7.0-json php7.0-dev libpcre3-dev

安装Zephir

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

$ cd zephir

$ ./install -c

检查一下是否安装成功

$ zephir help

_____ __ _

/__ / ___ ____ / /_ (_)____

/ / / _ \/ __ \/ __ \/ / ___/

/ /__/ __/ /_/ / / / / / /

/____/\___/ .___/_/ /_/_/_/

/_/

Zephir version 0.9.11-0161027a24

Usage:

command [options]

Available commands:

api [--theme-path=/path][--output-directory=/path][--theme-options={json}|/path]Generates a HTML API

compile Compile a Zephir extension

install Installs the extension (requires root password)

version Shows the Zephir version

help Displays this help

init [namespace] Initializes a Zephir extension

fullclean Cleans the generated object files in compilation

builddev Generate/Compile/Install a Zephir extension in development mode

stubs Generates extension PHP stubs

build Generate/Compile/Install a Zephir extension

generate Generates C code from the Zephir code

clean Cleans the generated object files in compilation

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

这就是安装成功了

编写一个demo

如何下手呢?上面的zephir help已经给过我们提示了

init [namespace] Initializes a Zephir extension

我们可以这样创建一个新工程,比如按照官网文档上的

$ zephir init utils

这样我们就生成了一个目录

utils/

看一下结构

$ cd utils

$ ls

ext/ utils/ config.json

其他暂且不管,我们的代码应该在utils/utils/下面编写

//必然是喜闻乐见的helloworld

//创建文件greeting.zep

namespace Utils;

class Greeting

{

public static function say()

{

echo "hello world!";

}

}

保存之后,终端工具编译安装一下,可以只编译(zephir compile),也可以只安装(zephir install),我们按照官网的例子,既编译又安装,so

//在你刚才创建的工程目录下

$ zephir build

执行这个命令会先把zephir代码解析成C代码,然后编译该C代码成.so库文件,最后放进你的php扩展库目录,最后一步会要求你提供root账号的口令,输入口令后会提示你不要忘了重启web服务器

//我们看一下这台服务器上的php扩展库目录

$ php -i | grep extension_dir

extension_dir => /usr/lib/php/20151012

//进入这个目录看一下

$ ls /usr/lib/php/20151012|grep utils

utils.so

没问题,然后我们编辑一下配置文件php.ini或者在扩展配置文件目录(我是这个:/etc/php/7.0/cli/conf.d/)新建文件utils.ini,写入一行

extension=utils.so

注意:

debian/ubuntu系的发行版php和php-cli的配置文件和扩展配置文件目录都是独立的,如果该扩展需要在web服务器环境下使用,需要在相应位置重复上述过程,具体文件位置,使用phpinfo()查看

如果一切顺利,此时执行php -m就可以看到utils扩展

$ php -m | grep utils

utils

我们写一个php脚本,试试这个扩展能不能用

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

终端执行一下(当然也可以浏览器访问一下)

$ php test_utils.php

hello world!

写个真正有用的!

hello world并没有太大用处,我们写一个别的,比如扩充一下php的二维数组操作

//创建文件arr.zep

namespace Utils;

class Arr

{

/**

* 二维数组取多列

*

* @param array matrix 待处理数组

* @param array cols 指定多列列名

* @return array

*/

public function matrixCols(array matrix, array cols) -> array

{

array out = [];

var key, value;

let cols = array_flip(cols);

for key, value in matrix {

let out[key] = array_intersect_key(value, cols);

}

return $out;

}

}

跟上边一样,编译出来

zephir build

在cli下不需要其他操作,会覆盖上一次编译的库文件。如果想通过web服务器访问,则需要重启一下

写个php脚本试一下

$arr = [

[

'phone' => 123456,

'name' => '张三',

'gender' => '男'

],

[

'phone' => 7890,

'name' => '张四',

'gender' => '女'

],

[

'phone' => 7890,

'name' => '张五',

'gender' => '男'

],

[

'phone' => 123456,

'name' => '张六',

'gender' => '女'

]

];

$a = new Utils\Arr;

$o = $a->matrixCols($arr, ['name', 'gender']);

var_dump($o);

运行一下

$ php test_utils.php

array(4) {

[0]=>

array(2) {

["name"]=>

string(6) "张三"

["gender"]=>

string(3) "男"

}

[1]=>

array(2) {

["name"]=>

string(6) "张四"

["gender"]=>

string(3) "女"

}

[2]=>

array(2) {

["name"]=>

string(6) "张五"

["gender"]=>

string(3) "男"

}

[3]=>

array(2) {

["name"]=>

string(6) "张六"

["gender"]=>

string(3) "女"

}

}

很成功

生成API

有了库文件,总得让人知道这个库有哪些功能,怎么用。zephir提供了非常棒的文档生成器,只要zep文件中的代码按照phpdoc的格式编写即可

终端执行

zephir api

utils工程目录下会生成一个doc目录,里面就是html格式的API文档,默认theme就很美观了,也可以自定义

生成IDE支持文件

工程目录下,终端执行

zephir stubs

会在工程目录下生成一个ide目录

里面是版本号目录,再里面是真真货了,名为Utils,把这个目录在IDE里面设置一下即可得到代码提示,自动补全等辅助功能

在phpstorm里面是这样的:

File->settings->Languages & Frameworks->PHP->Include Path

加入这个目录的地址

 类似资料: