這篇文章主要介紹了PHP7擴充開發之基於函數方式使用lib庫的方法,結合執行個體形式分析了PHP7中lib庫擴充的封裝與調用相關操作技巧,需要的朋友可以參考下
本文執行個體講述了PHP7擴充開發之基於函數方式使用lib庫的方法。分享給大家供大家參考,具體如下:
前言
首先說下什麼是lib庫。lib庫就是一個提供特定功能的一個檔案。可以把它看成是PHP的一個檔案,這個檔案提供一些函數方法。只是這個lib庫是用c或者c++寫的。
使用lib庫的情境。一些軟體已經提供了lib庫,我們就沒必要再重複實現一次。如,原先的mysql擴充,就是使用mysql官方的lib庫進行的封裝。
在本文,我們將建立一個簡單的lib庫,並在擴充中進行封裝調用。
代碼
基礎代碼
這個擴充,我們將在say擴充上增加call_lib_fun()
。say擴充相關代碼大家請看這篇博文。PHP7擴充開發之hello word 文中已經詳細介紹了如何建立一個擴充和提供了源碼下載。
代碼實現
建立lib庫
增加hello.h檔案。代碼如下:
#ifndef TEST_HEADER_FILE#define TEST_HEADER_FILE#include <stdlib.h>#include <string.h>char * show_site(); #endif
增加hello.c檔案。代碼如下:
#include "hello.h"char * show_site(){ char *site = malloc(15 * sizeof(char)); strcpy(site, "www.bo56.com"); return site;}
然後使用以下命令產生lib庫(動態庫)檔案:
$ gcc -g -O0 -fPIC -shared -o hello.so ./hello.c
這樣在目前的目錄下就會產生一個hello.so的動態庫檔案。不同作業系統動態庫的副檔名可能不一樣。如 windows下是dll,mac下是 dylib,linux下是so。
然後把hello.so拷貝到/usr/local/lib/目錄下,命名為hello.so
把hello.h拷貝到/usr/local/include/目錄下。
修改config.m4檔案
增加擴充對動態庫的依賴。主要增加以下幾行代碼:
PHP_ADD_LIBRARY_WITH_PATH(hello, /usr/local/lib/, SAY_SHARED_LIBADD)PHP_SUBST(SAY_SHARED_LIBADD)
編寫擴充代碼
增加hello.h
的引用。
#include "php_say.h"#include <stdio.h>//下面這行是增加的#include "hello.h"
增加show_site()
方法。代碼如下:
PHP_FUNCTION(show_site){ char *site = show_site(); RETVAL_STRING(site); free(site); return;}
php調用結果
<?php$result = show_site();var_dump($result);?>
執行結果
$php ./test.phpstring(12) "www.bo56.com"
代碼解讀
PHP_ADD_LIBRARY_WITH_PATH 是用於指定lib庫的名字,地址等資訊。第一個參數是名字,第二個參數是地址。
在say.c檔案中增加lib庫的標頭檔。使用#include "hello.h"
。
在擴充代碼中就像調用其他核心提供的方法一樣,去調用lib庫中的方法。
您可能感興趣的文章:
thinkphp 中的volist標籤在ajax操作中的特殊性
詳解thinkphp中的volist標籤的講解
PHP實現找出鏈表中環的入口節點的相關知識講解