国产探花免费观看_亚洲丰满少妇自慰呻吟_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 返回值的詳細內容,更多請關注 其它相關文章!

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 土默特右旗| 错那县| 惠东县| 内江市| 沈丘县| 义马市| 镇平县| 东乌珠穆沁旗| 平邑县| 柘荣县| 五华县| 赞皇县| 林周县| 乌拉特中旗| 宿迁市| 上饶市| 保山市| 陇川县| 宁南县| 永平县| 龙川县| 禹城市| 庆城县| 元阳县| 仁怀市| 抚远县| 彩票| 滕州市| 台南县| 奉节县| 广水市| 承德县| 固始县| 务川| 土默特右旗| 保康县| 沭阳县| 澜沧| 麻栗坡县| 新闻| 咸宁市|