国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP擴(kuò)展開發(fā)系列01 - 我要成為一名老司機(jī)

30e8336b8229 / 1070人閱讀

摘要:找找出別人擴(kuò)展真么寫的。這次主要說了下寫擴(kuò)展要準(zhǔn)備的一些基本知識。比如不同編譯方式這個(gè)你看別的擴(kuò)展源碼的時(shí)候就會(huì)注意到具體作用。后面再來慢慢學(xué)習(xí)老司機(jī)的各種姿勢。包括,函數(shù),函數(shù)參數(shù),函數(shù)返回值,對象,類,命名空間等等等。

PHP擴(kuò)展開發(fā)系列01 - 我要成為一名老司機(jī) 1. 關(guān)于擴(kuò)展的教程貌似挺全了,為啥還寫?

記錄下我寫擴(kuò)展的歷程

自認(rèn)為會(huì)寫的更容易理解

我的宗旨就是 "先用再識" 代碼寫著寫著就知道原理了 或者說邊寫邊學(xué), 邊學(xué)邊寫

2. 那么你首先要具備哪些預(yù)備知識? 答:你需要先過科目一

C 為啥放第一位?

PHP 不會(huì)?那寫什么PHP擴(kuò)展?

PHP的編譯安裝

phpize 和 php-config 這個(gè)靠你們自己去了解了

關(guān)于PHP編譯 前期非必須,但是要知道的 (no-debug, non-zts, debug, zts)

問?搜? -- 有時(shí)候不一定要問或者搜才能找到解決的答案。

找! --- 找出別人擴(kuò)展真么寫的 (php-src/ext)。不但有答案,還有思想。

至于 PHP ZEND 原理啥的, 很重要, 很重要, 很重要, 但是這里暫時(shí)放一邊,沒事可以去了解了解。

3. 先看看剛上車的司機(jī)是什么樣的? (示例代碼) 最后有注釋版的

代碼說明

這是一個(gè)很簡單的擴(kuò)展, 簡單到?jīng)]有功能

擴(kuò)展名稱 laosiji

目前看來 這只是一個(gè)只會(huì)裝B(啥都不會(huì))的司機(jī)

三個(gè)文件

config.m4

php_laosiji.h

laosiji.c

config.m4

PHP_ARG_ENABLE(
  laosiji, 
  whether to enable laosiji support,
  [  --enable-laosiji           Enable laosiji support]
)

if test "$PHP_LAOSIJI" != "no"; then
  PHP_NEW_EXTENSION(laosiji, laosiji.c, $ext_shared)
fi

php_laosiji.h

#define PHP_LAOSIJI_EXTNAME "laosiji"
#define PHP_LAOSIJI_VERSION "1.0.0"

// 加載config.h,如果配置了的話
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

// 加載php頭文件
#include "php.h"

laosiji.c

#include "php_laosiji.h"

// module entry
zend_module_entry laosiji_module_entry = {
#if ZEND_MODULE_API_NO >= 20010901
    STANDARD_MODULE_HEADER,
#endif
    PHP_LAOSIJI_EXTNAME, /* 擴(kuò)展名稱 */
    NULL,                /* Functions */
    NULL,                /* MINIT */
    NULL,                /* MSHUTDOWN */
    NULL,                /* RINIT */
    NULL,                /* RSHUTDOWN */
    NULL,                /* MINFO */
#if ZEND_MODULE_API_NO >= 20010901
    PHP_LAOSIJI_VERSION, /* 擴(kuò)展版本 */
#endif
    STANDARD_MODULE_PROPERTIES};

#ifdef COMPILE_DL_LAOSIJI
ZEND_GET_MODULE(laosiji)
#endif
5. 作為司機(jī)的一本基本開車動(dòng)作 (擴(kuò)展的編譯安裝等)

phpize

./configure 這里要注意下 php-config

make

make install

加載 .so 擴(kuò)展文件

6. 點(diǎn)火啟動(dòng) 試試我們的擴(kuò)展

7. 小節(jié)

差不多就到這里了。這次主要說了下寫PHP擴(kuò)展要準(zhǔn)備的一些基本知識。當(dāng)然有些人可能對上面提到部分概念沒深入了解。
比如 PHP不同編譯方式(debug, nts..)<這個(gè)你看別的擴(kuò)展源碼的時(shí)候就會(huì)注意到>、phpize、php-config 具體作用。
phpize、php-config 一定要注意,這里提醒你這回遇到坑。

后面再來慢慢學(xué)習(xí)老司機(jī)的各種姿勢。包括,函數(shù),函數(shù)參數(shù),函數(shù)返回值,對象,類,命名空間等等等。

8. 注釋版代碼

config.m4

dnl dnl 開頭的語句 屬于注釋內(nèi)容

dnl PHP_ARG_ENABLE 函數(shù)有三個(gè)參數(shù)
dnl 第一個(gè)參數(shù) laosiji 擴(kuò)展名稱 (不用加引號)
dnl 第二個(gè)參數(shù) 運(yùn)行 ./configure 腳本時(shí)顯示的內(nèi)容
dnl 第三個(gè)參數(shù) 調(diào)用 ./configure --help 顯示的幫助信息

dnl 最后去了接下 PHP_ARG_WITH 這里就先不提了

PHP_ARG_ENABLE(
  laosiji, 
  whether to enable laosiji support,
  [  --enable-laosiji           Enable laosiji support]
)

if test "$PHP_LAOSIJI" != "no"; then

  dnl PHP_NEW_EXTENSION 函數(shù)聲明 擴(kuò)展的名稱、需要的源文件名、擴(kuò)展的編譯形式
  dnl 第一個(gè)參數(shù) 擴(kuò)展的名稱
  dnl 第 2 。。 n-1 個(gè)參數(shù)  需要的源文件名
  dnl 最后的$ext_shared參數(shù)用來聲明這個(gè)擴(kuò)展不是一個(gè)靜態(tài)模塊,而是在php運(yùn)行時(shí)動(dòng)態(tài)加載的。
  dnl 如果我們的擴(kuò)展使用了多個(gè)文件,便可以將這多個(gè)文件名羅列在函數(shù)的參數(shù)里,如:
  dnl PHP_NEW_EXTENSION(laosiji, laosiji.c, laosiji_2.c, laosiji_3.c, $ext_shared)

  PHP_NEW_EXTENSION(laosiji, laosiji.c, $ext_shared)
fi

php_laosiji.h

// 定義 擴(kuò)展相關(guān)的宏 比如版本號 擴(kuò)展名稱等等。。
#define PHP_LAOSIJI_EXTNAME "laosiji"
#define PHP_LAOSIJI_VERSION "1.0.0"

// 加載config.h,如果配置了的話
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

// 加載php頭文件
// 這個(gè) 很有必要哈
#include "php.h"

laosiji.c

#include "php_laosiji.h"

// module entry
// 1. laosiji_module_entry  擴(kuò)展名稱_module_entry
// 2. PHP_LAOSIJI_EXTNAME   /* 擴(kuò)展名稱 */
// 3. PHP_LAOSIJI_VERSION, /* 擴(kuò)展版本 */
// 那些 NULL ? 
// 第一個(gè)你要記住 /* Functions */ 這行 想想 php 中的函數(shù)
// 第二個(gè)你要記住 /* MINIT */ 想想 class && object
// 第三個(gè)你要記住 MINIT MSHUTDOWN RINIT RSHUTDOWN MINFO 慢慢來 不著急

zend_module_entry laosiji_module_entry = {
#if ZEND_MODULE_API_NO >= 20010901
    STANDARD_MODULE_HEADER,
#endif
    PHP_LAOSIJI_EXTNAME, /* 擴(kuò)展名稱 */
    NULL,                /* Functions */
    NULL,                /* MINIT */
    NULL,                /* MSHUTDOWN */
    NULL,                /* RINIT */
    NULL,                /* RSHUTDOWN */
    NULL,                /* MINFO */
#if ZEND_MODULE_API_NO >= 20010901
    PHP_LAOSIJI_VERSION, /* 擴(kuò)展版本 */
#endif
    STANDARD_MODULE_PROPERTIES};

#ifdef COMPILE_DL_LAOSIJI
ZEND_GET_MODULE(laosiji)
#endif
參考

簡單擴(kuò)展 https://github.com/imlaosiji/...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/23046.html

相關(guān)文章

  • PHP擴(kuò)展開發(fā)系列02 - 司機(jī)起步之函數(shù)

    摘要:上一篇擴(kuò)展開發(fā)引導(dǎo)文章中。這篇文章就開始介紹使用工具來生成擴(kuò)展項(xiàng)目文件注意這里的本身沒有這玩意,是我給自帶的起的別名這個(gè)工具就是還有點(diǎn)迷惑那不廢話了。至于其他參數(shù)自行了解。發(fā)現(xiàn)也是有這三個(gè)文件的。所以,不要質(zhì)疑自己。 上一篇擴(kuò)展開發(fā)引導(dǎo)文章中。創(chuàng)建了編寫擴(kuò)展的三個(gè)基本文件。或許你會(huì)有個(gè)疑問PHP沒有類似的自動(dòng)生成項(xiàng)目框架的工具嗎? 當(dāng)然有。這篇文章就開始介紹使用 php-ext-cli...

    cloud 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來學(xué)習(xí)一門新的編程語言吧!

    摘要:入門,第一個(gè)這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運(yùn)行在之上。它通過編輯類工具,帶來了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...

    caspar 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來學(xué)習(xí)一門新的編程語言吧!

    摘要:入門,第一個(gè)這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運(yùn)行在之上。它通過編輯類工具,帶來了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...

    nihao 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來學(xué)習(xí)一門新的編程語言吧!

    摘要:入門,第一個(gè)這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運(yùn)行在之上。它通過編輯類工具,帶來了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...

    Drummor 評論0 收藏0
  • 2017年2月份前端資源分享

    平日學(xué)習(xí)接觸過的網(wǎng)站積累,以每月的形式發(fā)布。2017年以前看這個(gè)網(wǎng)址:http://www.kancloud.cn/jsfron... 1. Javascript 前端生成好看的二維碼 十大經(jīng)典排序算法(帶動(dòng)圖演示) 為什么知乎前端圈普遍認(rèn)為H5游戲和H5展示的JSer 個(gè)人整理和封裝的YU.js庫|中文詳細(xì)注釋|供新手學(xué)習(xí)使用 擴(kuò)展JavaScript語法記錄 - 掉坑初期工具 漢字拼音轉(zhuǎn)換...

    chengjianhua 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<