日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

php7 返回值,7.6.4 函数返回值

發(fā)布時(shí)間:2024/7/19 php 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php7 返回值,7.6.4 函数返回值 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

### 7.6.4 函數(shù)返回值

調(diào)用內(nèi)部函數(shù)時(shí)其返回值指針作為參數(shù)傳入,這個(gè)參數(shù)為`zval *return_value`,如果函數(shù)有返回值直接設(shè)置此指針即可,需要特別注意的是設(shè)置返回值時(shí)需要增加其引用計(jì)數(shù),舉個(gè)例子來(lái)看:

```c

PHP_FUNCTION(my_func_1)

{

zval *arr;

if(zend_parse_parameters(ZEND_NUM_ARGS(), "a", &arr) == FAILURE){

RETURN_FALSE;

}

//增加引用計(jì)數(shù)

Z_ADDREF_P(arr);

//設(shè)置返回值為數(shù)組:

ZVAL_ARR(return_value, Z_ARR_P(arr));

}

```

此函數(shù)接收一個(gè)數(shù)組,然后直接返回該數(shù)組,相當(dāng)于:

```php

function my_func_1($arr){

return $arr;

}

```

調(diào)用該函數(shù):

```php

$a = array(); //$a -> zend_array(refcount:1)

$b = my_func_1($a); //傳參后:參數(shù)arr -> zend_array(refcount:2)

//然后函數(shù)內(nèi)部賦給了返回值:$b,$a,arr -> zend_array(refcount:3)

//函數(shù)return階段釋放了參數(shù):$b,$a -> zend_array(refcount:2)

var_dump($b);

=============[output]===========

array(0) {

}

```

雖然可以直接設(shè)置return_value,但實(shí)際使用時(shí)并不建議這么做,因?yàn)镻HP提供了很多專門用于設(shè)置返回值的宏,這些宏定義在`zend_API.h`中:

```c

//返回布爾型,b:IS_FALSE、IS_TRUE

#define RETURN_BOOL(b) { RETVAL_BOOL(b); return; }

//返回NULL

#define RETURN_NULL() { RETVAL_NULL(); return;}

//返回整形,l類型:zend_long

#define RETURN_LONG(l) { RETVAL_LONG(l); return; }

//返回浮點(diǎn)值,d類型:double

#define RETURN_DOUBLE(d) { RETVAL_DOUBLE(d); return; }

//返回字符串,可返回內(nèi)部字符串,s類型為:zend_string *

#define RETURN_STR(s) { RETVAL_STR(s); return; }

//返回內(nèi)部字符串,這種變量將不會(huì)被回收,s類型為:zend_string *

#define RETURN_INTERNED_STR(s) { RETVAL_INTERNED_STR(s); return; }

//返回普通字符串,非內(nèi)部字符串,s類型為:zend_string *

#define RETURN_NEW_STR(s) { RETVAL_NEW_STR(s); return; }

//拷貝字符串用于返回,這個(gè)會(huì)自己加引用計(jì)數(shù),s類型為:zend_string *

#define RETURN_STR_COPY(s) { RETVAL_STR_COPY(s); return; }

//返回char *類型的字符串,s類型為char *

#define RETURN_STRING(s) { RETVAL_STRING(s); return; }

//返回char *類型的字符串,s類型為char *,l為字符串長(zhǎng)度,類型為size_t

#define RETURN_STRINGL(s, l) { RETVAL_STRINGL(s, l); return; }

//返回空字符串

#define RETURN_EMPTY_STRING() { RETVAL_EMPTY_STRING(); return; }

//返回資源,r類型:zend_resource *

#define RETURN_RES(r) { RETVAL_RES(r); return; }

//返回?cái)?shù)組,r類型:zend_array *

#define RETURN_ARR(r) { RETVAL_ARR(r); return; }

//返回對(duì)象,r類型:zend_object *

#define RETURN_OBJ(r) { RETVAL_OBJ(r); return; }

//返回zval

#define RETURN_ZVAL(zv, copy, dtor) { RETVAL_ZVAL(zv, copy, dtor); return; }

//返回false

#define RETURN_FALSE { RETVAL_FALSE; return; }

//返回true

#define RETURN_TRUE { RETVAL_TRUE; return; }

總結(jié)

以上是生活随笔為你收集整理的php7 返回值,7.6.4 函数返回值的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。