PHP擴展開發(fā)中什么函數(shù)返回值,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
創(chuàng)新互聯(lián)公司專注于白城企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),成都做商城網(wǎng)站。白城網(wǎng)站建設(shè)公司,為白城等地區(qū)提供建站服務(wù)。全流程按需制作網(wǎng)站,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)API里面提供的宏定義來返回,在一定程度上這么說是不正確的,其實PHP擴展里面所有的函數(shù)的返回值都是通過一個名為return_value的變量傳
遞的,這個變量同時也是函數(shù)中的一個參數(shù),在PHP_FUNCTION()原型中定義。該參數(shù)總是包含有一個事先申請好空間的zval(關(guān)于zval是
PHP擴展開發(fā)里面比較復雜的部分,在后面的接收參數(shù)一文中再介紹)容器,并給它賦值為NULL,所以即使我們沒有聲明return_value,也可以
通過直接訪問它的成員而給它賦值。
在一個PHP擴展函數(shù)中,設(shè)置函數(shù)返回值,使用以下5種方式都是正確的:
RETURN_LONG(42); RETVAL_LONG(42); return; ZVAL_LONG(return_value, 42); return; Z_TYPE_P(return_value) = IS_LONG; Z_LVAL_P(return_value) = 42; return; return_value->type = IS_LONG; return_value->value.lval = 42; return;
關(guān)于ZVAL_LONG、Z_TYPE_P等宏在后面的文章會介紹。其實我們可以看到,RETURN_LONG是對RETVAL_LONG的再次封裝,不用我們顯式return。正如在第一篇快速入門里面介紹的,Zend API里面針對函數(shù)返回值提供了大量的宏定義:
RETURN_xxx系列宏定義:
RETURN_RESOURCE(resource) | 返回一個資源 |
RETURN_BOOL(bool) | 返回一個布爾值 |
RETURN_NULL() | 返回一個空值 |
RETURN_LONG(long) | 返回一個長整數(shù) |
RETURN_DOUBLE(double) | 返回一個雙精度浮點數(shù) |
RETURN_STRING(string, duplicate) | 返回一個字符串。duplicate表示這個字符是否使用 strdup()進行復制 |
RETURN_STRINGL(string, length, duplicate) | 返回一個定長的字符串。其余跟 RETURN_STRING 相同。這個宏速度更快而且是二進制安全的 |
RETURN_EMPTY_STRING() | 返回一個空字符串 |
RETURN_FALSE | 返回一個布爾值假 |
RETURN_TRUE | 返回一個布爾值真 |
RETVAL_xxx系列宏定義:
RETVAL_RESOURCE(resource) | 設(shè)定返回值為指定的一個資源 |
RETVAL_BOOL(bool) | 設(shè)定返回值為指定的一個布爾值 |
RETVAL_NULL | 設(shè)定返回值為空值 |
RETVAL_LONG(long) | 設(shè)定返回值為指定的一個長整數(shù) |
RETVAL_DOUBLE(double) | 設(shè)定返回值為指定的一個雙精度浮點數(shù) |
RETVAL_STRING(string, duplicate) | 設(shè)定返回值為指定的一個字符串,duplicate含義同 RETURN_STRING |
RETVAL_STRINGL(string, length, duplicate) | 定返回值為指定的一個定長的字符串。其余跟RETVAL_STRING相同。這個宏速度更快而且是二進制安全的 |
RETVAL_EMPTY_STRING | 設(shè)定返回值為空字符串 |
RETVAL_FALSE | 設(shè)定返回值為布爾值假 |
RETVAL_TRUE | 設(shè)定返回值為布爾值真 |
除了使用RETURN_xxx系列宏定義之外,使用其它的方式,我們都需要顯式的使用return語句。如果需要返回的是像數(shù)組和對象這樣的復雜類
型的數(shù)據(jù),那就需要先調(diào)用array_init()和object_init(),也可以使用相應(yīng)的hash函數(shù)直接操作return_value,由于
這個過程比較復雜,沒有相應(yīng)的宏輔助我們,在后面介紹數(shù)組和對象類型時再專門介紹。下面看一個例子,使用上面我們提到的5種方式。
在頭文件中加入函數(shù)聲明:
實現(xiàn)函數(shù):
PHP_FUNCTION(return_value_way1) { RETURN_LONG(42); } PHP_FUNCTION(return_value_way2) { RETVAL_LONG(42); return; } PHP_FUNCTION(return_value_way3) { ZVAL_LONG(return_value, 42); return; } PHP_FUNCTION(return_value_way4) { Z_TYPE_P(return_value) = IS_LONG; Z_LVAL_P(return_value) = 42; return; } PHP_FUNCTION(return_value_way5) { return_value->type = IS_LONG; return_value->value.lval = 42; return; }
注冊擴展函數(shù)到函數(shù)表,這幾個函數(shù)都不需要參數(shù),用NULL表示:
最后編譯擴展,編寫簡單的測試腳本后運行
關(guān)于PHP擴展函數(shù)返回值就介紹這么多了。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,的支持。
網(wǎng)站標題:PHP擴展開發(fā)中什么函數(shù)返回值-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://vcdvsql.cn/article30/jihso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、微信小程序、面包屑導航、服務(wù)器托管、網(wǎng)站內(nèi)鏈、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容