国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

淺談PHP源碼十二:關于return_value 返回值

2020-03-22 18:43:09
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了關于淺談PHP源碼十二:關于return_html' target='_blank'>value 返回值 ,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

閱讀PHP的源碼有一段時間了,知道在擴展函數中只要使用PHP_FUNCTION,并且將值賦給return_value就可以返回此函數的值。
然后自己跟蹤代碼,一直以為有一個return_value這樣的全局變量或包含 return_value的全局hashtable存在,然后不停的調試,一直沒有發現,
直到今天問了鳥哥后才頓然醒悟,鳥哥在郵件中說:“ return_value是php中所有對php腳本提供函數PHP_FUCTION的一個參數,通過宏展開的。 通過復制給這個參數, ZE會將返回值給前端調用腳本。 ”

其宏定義如下:

 #define PHP_FUNCTION ZEND_FUNCTION#define ZEND_FUNCTION(name) ZEND_NAMED_FUNCTION(ZEND_FN(name))#define ZEND_NAMED_FUNCTION(name) void name(INTERNAL_FUNCTION_PARAMETERS)#define INTERNAL_FUNCTION_PARAMETERS int ht, zval *return_value, zval **return_value_ptr, zval *this_ptr, int return_value_used TSRMLS_DC

一些內置的函數(比如each)直接使用ZEND_FUNCTION
擴展函數使用PHP_FUNCTION

在一些擴展函數中我們經常看到一些是沒有使用return_value,而是使用了一些包含了return_value的宏代替。
常見的宏如下:

  //    zend_API.h    500行開始  #define ZVAL_FALSE(z)   ZVAL_BOOL(z, 0)#define ZVAL_TRUE(z)   ZVAL_BOOL(z, 1)   #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 !

相關推薦:

淺談PHP源碼十一:關于 array_key_exists,in_array的介紹

淺談PHP源碼十:關于array_keys,array_values函數

淺談PHP源碼九:關于array_unshift, array_push的介紹

以上就是淺談PHP源碼十二:關于return_value 返回值的詳細內容,更多請關注 其它相關文章!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜都市| 剑河县| 浪卡子县| 武邑县| 云梦县| 阜新市| 壶关县| 兴安盟| 名山县| 新蔡县| 沂水县| 北海市| 陆良县| 台东县| 紫云| 遵义市| 泰州市| 深泽县| 曲松县| 凭祥市| 祁东县| 横峰县| 河间市| 西昌市| 英吉沙县| 葫芦岛市| 景洪市| 璧山县| 柯坪县| 瓦房店市| 芮城县| 都昌县| 定西市| 饶阳县| 雅江县| 南涧| 平舆县| 连州市| 郎溪县| 原阳县| 益阳市|