zephir mysql_用Zephir编写php扩展库以及生成文档、IDE提示
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
加入這個目錄的地址
總結
以上是生活随笔為你收集整理的zephir mysql_用Zephir编写php扩展库以及生成文档、IDE提示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php返回mysql错误语句_[已解决]
- 下一篇: mysql 插入怎么知道id_如何知道刚