偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

不要再天天寫(xiě)表單了,淘寶大牛教你零基礎(chǔ)寫(xiě)PHP擴(kuò)展

開(kāi)發(fā) 后端 企業(yè)動(dòng)態(tài)
信海龍老師于2013年加入阿里巴巴,擁有十年互聯(lián)網(wǎng)開(kāi)發(fā)經(jīng)驗(yàn)。為幫助寫(xiě)PHP的小伙伴提高提高業(yè)務(wù)能力,特意在知加創(chuàng)建圈子『零基礎(chǔ)學(xué)習(xí)PHP擴(kuò)展開(kāi)發(fā)』,用于與PHP擴(kuò)展開(kāi)發(fā)初學(xué)者分享、交流。

很多PHPer天天寫(xiě)表單,不知如何提升。如果你已經(jīng)熟悉了數(shù)據(jù)集和服務(wù)器端的優(yōu)化,不妨試試通過(guò)PHP擴(kuò)展向系統(tǒng)層進(jìn)軍。當(dāng)原有的PHP代碼實(shí)現(xiàn)出現(xiàn)性能瓶頸,可以考慮通過(guò)PHP擴(kuò)展實(shí)現(xiàn);純PHP代碼無(wú)法實(shí)現(xiàn)的功能,可以考慮通過(guò)PHP擴(kuò)展調(diào)用其他相關(guān)庫(kù)實(shí)現(xiàn)。既能提升業(yè)務(wù)能力,又能幫助大家逐漸通過(guò)擴(kuò)展了解PHP 源代碼層的運(yùn)作機(jī)制。 

[[186052]]

擴(kuò)展入門(mén)較難,這里特別推薦淘寶大牛信海龍老師的入門(mén)課程,手把手教會(huì)你只要一塊錢(qián)。 

我們精選出文集中的第二章內(nèi)容,以供免費(fèi)試讀。

(如果你不喜歡付費(fèi)課程,也可以通過(guò)PHP手冊(cè)第二部分進(jìn)行學(xué)習(xí):http://php.net/manual/zh/internals2.structure.php) 

 

從hello world開(kāi)始(試讀) 

以下內(nèi)容以PHP7作為基礎(chǔ),講解如何從零開(kāi)始創(chuàng)建一個(gè)PHP擴(kuò)展。示例中,我們將實(shí)現(xiàn)如下功能:

  1. <?php 
  2. function say() { 
  3.     return "hello word"
  4. }
  5. echo say(); 
  6. ?> 

 輸出內(nèi)容:

  1. $ php ./test.php 
  2. $ hello word 

在擴(kuò)展中實(shí)現(xiàn)一個(gè)say方法,調(diào)用say方法后,輸出 hello word。 

***步:生成代碼

PHP為我們提供了生成基本代碼的工具 ext_skel。這個(gè)工具在PHP源代碼的./ext目錄下。

  1. $ cd php_src/ext/    
  2. $ ./ext_skel --extname=say  

extname參數(shù)的值就是擴(kuò)展名稱(chēng)。執(zhí)行ext_skel命令后,這樣在當(dāng)前目錄下會(huì)生成一個(gè)與擴(kuò)展名一樣的目錄。 

第二步:修改config.m4配置文件

config.m4的作用就是配合phpize工具生成configure文件。configure文件是用于環(huán)境檢測(cè)的。檢測(cè)擴(kuò)展編譯運(yùn)行所需的環(huán)境是否滿足。現(xiàn)在我們開(kāi)始修改config.m4文件。

  1. $ cd ./say   
  2. $ vim ./config.m4  

打開(kāi),config.m4文件后,你會(huì)發(fā)現(xiàn)這樣一段文字。

  1. dnl If your extension references something external, use with
  2.  
  3. dnl PHP_ARG_WITH(say, for say support, 
  4. dnl Make sure that the comment is aligned: 
  5. dnl [  --with-say             Include say support]) 
  6.  
  7. dnl Otherwise use enable: 
  8.   
  9. dnl PHP_ARG_ENABLE(say, whether to enable say support, 
  10. dnl Make sure that the comment is aligned: 
  11. dnl [  --enable-say           Enable say support]) 

其中,dnl 是注釋符號(hào)。上面的代碼說(shuō),如果你所編寫(xiě)的擴(kuò)展如果依賴(lài)其它的擴(kuò)展或者lib庫(kù),需要去掉PHP_ARG_WITH相關(guān)代碼的注釋。否則,去掉 PHP_ARG_ENABLE 相關(guān)代碼段的注釋。我們編寫(xiě)的擴(kuò)展不需要依賴(lài)其他的擴(kuò)展和lib庫(kù)。 

因此,我們?nèi)サ鬚HP_ARG_ENABLE前面的注釋。去掉注釋后的代碼如下:

  1. dnl If your extension references something external, use with
  2.  
  3.  dnl PHP_ARG_WITH(say, for say support, 
  4.  dnl Make sure that the comment is aligned: 
  5.  dnl [  --with-say             Include say support]) 
  6.  
  7.  dnl Otherwise use enable: 
  8.  
  9.  PHP_ARG_ENABLE(say, whether to enable say support, 
  10.  Make sure that the comment is aligned: 
  11.  [  --enable-say           Enable say support]) 

第三步:代碼實(shí)現(xiàn)

修改say.c文件。實(shí)現(xiàn)say方法。 找到PHP_FUNCTION(confirm_say_compiled),在其上面增加如下代碼:

  1. PHP_FUNCTION(say) 
  2.         zend_string *strg;        strg = strpprintf(0, "hello word"); 
  3.         RETURN_STR(strg); 

 找到 PHP_FE(confirm_say_compiled, 在上面增加如下代碼: 

  1. PHP_FE(say, NULL)  

修改后的代碼如下:

  1. const zend_function_entry say_functions[] = { 
  2.      PHP_FE(say, NULL)       /* For testing, remove later. */ 
  3.      PHP_FE(confirm_say_compiled,    NULL)       /* For testing, remove later. */ 
  4.      PHP_FE_END  /* Must be the last line in say_functions[] */ 
  5.  }; 
  6.  /* }}} */  

第四步:編譯安裝

編譯擴(kuò)展的步驟如下:

  1. $ phpize 
  2. $ ./configure 
  3. $ make && make install  

修改php.ini文件,增加如下代碼:

  1. [say] 
  2. extension = say.so  

然后執(zhí)行,php -m 命令。在輸出的內(nèi)容中,你會(huì)看到say字樣。 

第五步:調(diào)用測(cè)試

自己寫(xiě)一個(gè)腳本,調(diào)用say方法??摧敵龅膬?nèi)容是否符合預(yù)期。

  1. <?php 
  2. echo say(); 
  3. ?> 

輸出內(nèi)容:

  1. $ php ./test.php 
  2. $ hello word 

 想深入學(xué)習(xí)PHP擴(kuò)展的小伙伴,歡迎加入信海龍老師的特價(jià)付費(fèi)圈子:零基礎(chǔ)學(xué)習(xí)PHP擴(kuò)展開(kāi)發(fā) 

責(zé)任編輯:知加 來(lái)源: 知加
相關(guān)推薦

2017-07-03 15:04:41

2018-06-13 10:23:27

編程語(yǔ)言Python數(shù)據(jù)庫(kù)

2017-08-22 21:01:40

2024-05-31 08:53:56

2019-11-18 10:05:43

程序員技能開(kāi)發(fā)者

2019-11-18 10:16:37

工程師開(kāi)發(fā)網(wǎng)絡(luò)

2015-11-12 09:57:57

前端零基礎(chǔ)學(xué)習(xí)

2020-11-23 09:46:18

Java方法權(quán)限

2017-09-21 15:31:49

2016-11-25 13:05:18

2022-03-15 09:31:17

ESLint工作原理前端

2012-02-22 10:33:36

Wi-Fi

2022-04-13 07:51:49

API網(wǎng)關(guān)系統(tǒng)

2013-08-19 11:03:21

微軟谷歌

2020-04-09 14:02:33

NginxHttps前端

2021-03-23 17:21:48

Java編程開(kāi)發(fā)

2020-11-20 09:36:43

Java對(duì)象類(lèi)

2019-11-11 14:09:17

Swift數(shù)據(jù)科學(xué)語(yǔ)言

2021-01-13 14:55:54

JavaPython開(kāi)發(fā)

2018-10-17 11:20:55

SQL數(shù)據(jù)庫(kù)程序員
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)