PHP開發入門1

  1.    PHP開發入門1php

  2. PHP開發入門2---->PHP擴展開發入門2 HELLO WORLD數組

  3. PHP擴展開發入門3------>帶參數的函數函數

     一直都想學習PHP擴展開發。每當看到那麼多的C代碼就會以爲無從下手。有一次也用也開發了一個hello world。可是仍是不甚理解。學習

    最近,須要一個生成隨機字符串的方法。以爲原生PHP生成的有些慢(主要是想試試是否能夠學會寫擴展)。因而乎就用zehphir寫了一個擴展。測試

    阿西吧。速度比原生的還慢。以前也測試過zephir,這個貌似不加載PHP原生函數的時候還能夠,一旦調用原生函數,速度就會一降再降。因此想學zephir的,仍是把他看成一種代碼加密方式。加密

    因而,仍是考慮用C吧。那麼怎麼開發呢?spa

    百度,谷歌等搜索出來一大堆教程。有不少都說讓先寫個def文件。這個我第一次作的時候就是用的這種方法。不過此次死活沒有找到def的編寫教程。因而找教程。.net

    最終,我發現寫擴展,主要就須要在幾個地方添加定義,或添加功能便可。固然這裏只是作個簡單的函數而已。如何開發類,如今尚未看到,有資料的朋友能夠提供一些。code

     首先,ext_skel生成擴展代碼。對象

./ext_skel --extname=phpext

      而後,進入phpext目錄,能夠看到php_phpext.h和phpext.c。接下來首先打開php_phpext.h,找到以下代碼

PHP_MINFO_FUNCTION(phpext);

在下面添加你想添加的函數,其中函數名稱須要自定義一個英文字符串

PHP_FUNCTION(函數名稱)

  接下來打開phpext.c,找到以下代碼。這裏是PHP入口函數,須要告訴PHP你都有哪些函數。

const zend_function_entry ukey_functions[] = {


}

   在其中輸入你剛纔添加的PHP函數名稱

 PHP_FE(函數名稱, NULL)

   下面就要放大招了。添加函數的功能。在phpext.c的最後添加功能

PHP_FUNCTION(函數名稱)
{
//這裏填寫功能
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &length) == FAILURE) //這裏獲取一個整形的  參數 。length須要前面定義,這裏獲取到的參數賦值給length
{
    RETURN_NULL();//返回null  
}
}

 

PHP 內置的返回函數

#define RETVAL_RESOURCE(l)				ZVAL_RESOURCE(return_value, l)
#define RETVAL_BOOL(b)					ZVAL_BOOL(return_value, b)
#define RETVAL_NULL() 					ZVAL_NULL(return_value)
#define RETVAL_LONG(l) 					ZVAL_LONG(return_value, l)
#define RETVAL_DOUBLE(d) 				ZVAL_DOUBLE(return_value, d)
#define RETVAL_STRING(s, duplicate) 		ZVAL_STRING(return_value, s, duplicate)
#define RETVAL_STRINGL(s, l, duplicate) 	ZVAL_STRINGL(return_value, s, l, duplicate)
#define RETVAL_EMPTY_STRING() 			ZVAL_EMPTY_STRING(return_value)
#define RETVAL_ZVAL(zv, copy, dtor)		ZVAL_ZVAL(return_value, zv, copy, dtor)
#define RETVAL_FALSE  					ZVAL_BOOL(return_value, 0)
#define RETVAL_TRUE   					ZVAL_BOOL(return_value, 1)

#define RETURN_RESOURCE(l) 				{ RETVAL_RESOURCE(l); return; }
#define RETURN_BOOL(b) 					{ RETVAL_BOOL(b); return; }
#define RETURN_NULL() 					{ RETVAL_NULL(); return;}
#define RETURN_LONG(l) 					{ RETVAL_LONG(l); return; }
#define RETURN_DOUBLE(d) 				{ RETVAL_DOUBLE(d); return; }
#define RETURN_STRING(s, duplicate) 	{ RETVAL_STRING(s, duplicate); return; }
#define RETURN_STRINGL(s, l, duplicate) { RETVAL_STRINGL(s, l, duplicate); return; }
#define RETURN_EMPTY_STRING() 			{ RETVAL_EMPTY_STRING(); return; }
#define RETURN_ZVAL(zv, copy, dtor)		{ RETVAL_ZVAL(zv, copy, dtor); return; }
#define RETURN_FALSE  					{ RETVAL_FALSE; return; }
#define RETURN_TRUE   					{ RETVAL_TRUE; return; }

PHP  接收並格式化參數

b	Boolean
l	Integer 整型
d	Floating point 浮點型
s	String 字符串
r	Resource 資源
a	Array 數組
o	Object instance 對象
O	Object instance of a specified type 特定類型的對象
z	Non-specific zval 任意類型~
Z	zval**類型
f	表示函數、方法名稱,PHP5.1裏貌似木有... .
相關文章
相關標籤/搜索