PHP7擴(kuò)展開(kāi)發(fā)之基于函數(shù)方式使用lib庫(kù)的方法詳解
本文實(shí)例講述了PHP7擴(kuò)展開(kāi)發(fā)之基于函數(shù)方式使用lib庫(kù)的方法。分享給大家供大家參考,具體如下:
前言
首先說(shuō)下什么是lib庫(kù)。lib庫(kù)就是一個(gè)提供特定功能的一個(gè)文件??梢园阉闯墒荘HP的一個(gè)文件,這個(gè)文件提供一些函數(shù)方法。只是這個(gè)lib庫(kù)是用c或者c++寫(xiě)的。
使用lib庫(kù)的場(chǎng)景。一些軟件已經(jīng)提供了lib庫(kù),我們就沒(méi)必要再重復(fù)實(shí)現(xiàn)一次。如,原先的mysql擴(kuò)展,就是使用mysql官方的lib庫(kù)進(jìn)行的封裝。
在本文,我們將建立一個(gè)簡(jiǎn)單的lib庫(kù),并在擴(kuò)展中進(jìn)行封裝調(diào)用。
代碼
基礎(chǔ)代碼
這個(gè)擴(kuò)展,我們將在say擴(kuò)展上增加call_lib_fun()
。say擴(kuò)展相關(guān)代碼大家請(qǐng)看這篇博文。PHP7擴(kuò)展開(kāi)發(fā)之hello word 文中已經(jīng)詳細(xì)介紹了如何創(chuàng)建一個(gè)擴(kuò)展和提供了源碼下載。
代碼實(shí)現(xiàn)
建立lib庫(kù)
增加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庫(kù)(動(dòng)態(tài)庫(kù))文件:
$ gcc -g -O0 -fPIC -shared -o hello.so ./hello.c
這樣在當(dāng)前目錄下就會(huì)生成一個(gè)hello.so的動(dòng)態(tài)庫(kù)文件。不同操作系統(tǒng)動(dòng)態(tài)庫(kù)的擴(kuò)展名可能不一樣。如 windows下是dll,mac下是 dylib,linux下是so。
然后把hello.so拷貝到/usr/local/lib/目錄下,命名為hello.so
把hello.h拷貝到/usr/local/include/目錄下。
修改config.m4文件
增加擴(kuò)展對(duì)動(dòng)態(tài)庫(kù)的依賴(lài)。主要增加以下幾行代碼:
PHP_ADD_LIBRARY_WITH_PATH(hello, /usr/local/lib/, SAY_SHARED_LIBADD) PHP_SUBST(SAY_SHARED_LIBADD)
編寫(xiě)擴(kuò)展代碼
增加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調(diào)用結(jié)果
<?php $result = show_site(); var_dump($result); ?>
執(zhí)行結(jié)果
$php ./test.php string(12) "www.bo56.com"
代碼解讀
PHP_ADD_LIBRARY_WITH_PATH 是用于指定lib庫(kù)的名字,地址等信息。第一個(gè)參數(shù)是名字,第二個(gè)參數(shù)是地址。
在say.c文件中增加lib庫(kù)的頭文件。使用#include "hello.h"
。
在擴(kuò)展代碼中就像調(diào)用其他內(nèi)核提供的方法一樣,去調(diào)用lib庫(kù)中的方法。
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《PHP擴(kuò)展開(kāi)發(fā)教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)教程》、《php+mysql數(shù)據(jù)庫(kù)操作入門(mén)教程》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- PHP擴(kuò)展開(kāi)發(fā)教程(總結(jié))
- PHP擴(kuò)展開(kāi)發(fā)入門(mén)教程
- PHP內(nèi)核介紹及擴(kuò)展開(kāi)發(fā)指南—基礎(chǔ)知識(shí)
- 初步介紹PHP擴(kuò)展開(kāi)發(fā)經(jīng)驗(yàn)分享
- PHP7擴(kuò)展開(kāi)發(fā)教程之Hello World實(shí)現(xiàn)方法示例
- PHP7擴(kuò)展開(kāi)發(fā)之hello word實(shí)現(xiàn)方法詳解
- 快速開(kāi)發(fā)一個(gè)PHP擴(kuò)展圖文教程
- 詳解Window7 下開(kāi)發(fā)php擴(kuò)展
- 一個(gè)簡(jiǎn)單php擴(kuò)展介紹與開(kāi)發(fā)教程
- 關(guān)于嘗試開(kāi)發(fā)PHP的MYSQL擴(kuò)展的使用
- windows下開(kāi)發(fā)并編譯PHP擴(kuò)展的方法
- php擴(kuò)展開(kāi)發(fā)入門(mén)demo示例
相關(guān)文章
php代碼架構(gòu)的八點(diǎn)注意事項(xiàng)
這篇文章主要介紹了php代碼架構(gòu)的八點(diǎn)注意事項(xiàng),較為全面的分析總結(jié)了基于面向?qū)ο蟪绦蛟O(shè)計(jì)的代碼架構(gòu)設(shè)計(jì)問(wèn)題相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-01-01開(kāi)啟CURL擴(kuò)展,讓服務(wù)器支持PHP curl函數(shù)(遠(yuǎn)程采集)
關(guān)于開(kāi)啟Curl的方法模板天下小編在此給大家簡(jiǎn)單說(shuō)一下2011-03-03php使用mysqli和pdo擴(kuò)展,測(cè)試對(duì)比mysql數(shù)據(jù)庫(kù)的執(zhí)行效率完整示例
這篇文章主要介紹了php使用mysqli和pdo擴(kuò)展,測(cè)試對(duì)比mysql數(shù)據(jù)庫(kù)的執(zhí)行效率,結(jié)合完整實(shí)例形式對(duì)比分析了php分別使用mysqli與pdo進(jìn)行數(shù)據(jù)庫(kù)插入操作的執(zhí)行時(shí)間,需要的朋友可以參考下2019-05-05php自動(dòng)注冊(cè)登錄驗(yàn)證機(jī)制實(shí)現(xiàn)代碼
在phpwind站點(diǎn)后臺(tái)添加一個(gè)名為“廣告管家”(廣告管家為CNZZ的一款廣告投放的應(yīng)用)的應(yīng)用,整個(gè)“廣告管家”的應(yīng)用是通過(guò)iframe載入,載入的具體內(nèi)容根據(jù)不同站點(diǎn)顯示針對(duì)該站點(diǎn)的具體內(nèi)容2011-12-12PHP中4個(gè)加速、緩存擴(kuò)展的區(qū)別和選用建議
這篇文章主要介紹了PHP中eAccelerator、memcached、xcache、APC等4個(gè)加速、緩存擴(kuò)展的區(qū)別和選用建議,需要的朋友可以參考下2014-03-03php如何實(shí)現(xiàn)不借助IDE快速定位行數(shù)或者方法定義的文件和位置
這篇文章主要介紹了php如何實(shí)現(xiàn)不借助IDE快速定位行數(shù)或者方法定義的文件和位置的相關(guān)資料,需要的朋友可以參考下2017-01-01