Contoh untuk menerangkan nilai pulangan pembangunan sambungan PHP7

藏色散人
Lepaskan: 2023-02-18 08:40:01
ke hadapan
2764 orang telah melayarinya

Kata Pengantar

Kali ini, kami akan menunjukkan cara menerima parameter masuk dan nilai pulangan output dalam sambungan PHP.

<?php
    function default_value ($type, $value = null) {
        if ($type == "int") {
            return $value ?? 0;
        } else if ($type == "bool") {
            return $value ?? false;
        } else if ($type == "str") {
            return is_null($value) ? "" : $value;
        }
        return null;
    }
 
    var_dump(default_value("int"));
    var_dump(default_value("int", 1));
    var_dump(default_value("bool"));
    var_dump(default_value("bool", true));
    var_dump(default_value("str"));
    var_dump(default_value("str", "a"));
    var_dump(default_value("array"));
?>
Salin selepas log masuk

Kami akan melaksanakan kaedah default_value dalam sambungan. [Disyorkan: "Tutorial PHP7"]

Kod

Kod sumber sambungan PHP untuk melaksanakan kaedah default_value

default_value kaedah:

PHP_FUNCTION(default_value)
{
    zend_string     *type;    
    zval            *value = NULL;
 
#ifndef FAST_ZPP
    /* Get function parameters and do error-checking. */
    if (zend_parse_parameters(ZEND_NUM_ARGS(), "S|z", &type, &value) == FAILURE) {
        return;
    }    
#else
    ZEND_PARSE_PARAMETERS_START(1, 2)
        Z_PARAM_STR(type)
        Z_PARAM_OPTIONAL
        Z_PARAM_ZVAL_EX(value, 0, 1)
    ZEND_PARSE_PARAMETERS_END();
#endif
     
    if (ZSTR_LEN(type) == 3 && strncmp(ZSTR_VAL(type), "int", 3) == 0 && value == NULL) {
        RETURN_LONG(0);
    } else if (ZSTR_LEN(type) == 3 && strncmp(ZSTR_VAL(type), "int", 3) == 0 && value != NULL) {
        RETURN_ZVAL(value, 0, 1); 
    } else if (ZSTR_LEN(type) == 4 && strncmp(ZSTR_VAL(type), "bool", 4) == 0 && value == NULL) {
        RETURN_FALSE;
    } else if (ZSTR_LEN(type) == 4 && strncmp(ZSTR_VAL(type), "bool", 4) == 0 && value != NULL) {
        RETURN_ZVAL(value, 0, 1); 
    } else if (ZSTR_LEN(type) == 3 && strncmp(ZSTR_VAL(type), "str", 3) == 0 && value == NULL) {
        RETURN_EMPTY_STRING();
    } else if (ZSTR_LEN(type) == 3 && strncmp(ZSTR_VAL(type), "str", 3) == 0 && value != NULL) {
        RETURN_ZVAL(value, 0, 1); 
    } 
    RETURN_NULL();
}
Salin selepas log masuk

Perihalan kod

Mendapatkan parameter

Dalam PHP7, dua kaedah mendapatkan parameter disediakan. zend_parse_parametersDan cara ZPP PANTAS.

zend_parse_parameters

Sebelum PHP7, fungsi zend_parse_parameters telah digunakan untuk mendapatkan parameter. Fungsi fungsi ini adalah untuk menukar parameter masuk kepada jenis yang sepadan dalam kernel PHP, supaya ia boleh digunakan dalam sambungan PHP.
Perihalan parameter:
Parameter pertama, bilangan parameter. Biasanya hanya gunakan ZEND_NUM_ARGS(), tidak perlu diubah.
Parameter kedua ialah rentetan format. Fungsi rentetan format ini adalah untuk menentukan hubungan penukaran antara parameter masuk dan jenis teras PHP.

Maksud S|z dalam kod ialah:
S bermaksud parameter ialah rentetan. Tukar parameter masuk kepada jenis zend_string.
|. menunjukkan bahawa parameter berikut adalah pilihan. Ia boleh diteruskan atau tidak.
z menunjukkan bahawa parameter adalah berbilang jenis. Tukar parameter masuk kepada jenis zval.

Selain itu, terdapat beberapa penentu yang memerlukan perhatian:
! Jika pembolehubah null dalam bahasa PHP diterima, ia ditukar terus kepada NULL dalam bahasa C dan bukannya merangkumnya ke dalam zval jenis IS_NULL.
/ Jika pembolehubah yang dilalui berkongsi zval dengan pembolehubah lain dan bukan rujukan, ia akan dipaksa untuk mengasingkan zval baharu is_ref__gc==0 dan refcount__gc==1.

Lebih banyak format. makna rentetan boleh dilihat di laman web rasmi. https://wiki.php.net/rfc/fast_zpp

ZPP CEPAT

Kaedah baharu yang disediakan dalam PHP7. Ia adalah untuk meningkatkan prestasi penghuraian parameter. Untuk kaedah yang kerap digunakan, adalah disyorkan untuk menggunakan kaedah FAST ZPP.
Penggunaan:
Mulakan dengan ZEND_PARSE_PARAMETERS_START(1, 2).
Parameter pertama menunjukkan bilangan parameter yang mesti dilalui, dan parameter kedua menunjukkan bilangan maksimum parameter yang boleh dilalui.
berakhir dengan ZEND_PARSE_PARAMETERS_END();.
Tengah ialah penghuraian parameter masuk.
Perlu diperhatikan bahawa secara amnya kaedah makro FAST ZPP sepadan dengan penentu zend_parse_parameters satu sama satu. Contohnya:
Z_PARAM_OPTIONAL sepadan dengan |
Z_PARAM_STR sepadan dengan S
Walau bagaimanapun, kaedah Z_PARAM_ZVAL_EX adalah istimewa. Ia sepadan dengan dua penentu, iaitu ! dan /. ! Sepadan dengan parameter kedua kaedah makro. / sepadan dengan parameter ketiga kaedah makro. Jika anda ingin mendayakannya, tetapkan ia kepada 1.

Kaedah makro FAST ZPP yang sepadan boleh dilihat di laman web rasmi https://wiki.php.net/rfc/fast_zpp#proposal

Nilai pulangan

nilai pulangan kaedah ialah Gunakan kaedah makro bermula dengan RETURN_ untuk kembali. Kaedah makro yang biasa digunakan ialah:
RETURN_NULL() Mengembalikan null
RETURN_LONG(l) Mengembalikan jenis integer
RETURN_DOUBLE(d) Mengembalikan jenis titik terapung
RETURN_STR(s) Mengembalikan rentetan. Parameter ialah zend_string * penunjuk
RETURN_STRING(s) mengembalikan rentetan. Parameternya ialah penunjuk char *
RETURN_STRINGL(s, l) mengembalikan rentetan. Parameter kedua ialah panjang rentetan.
RETURN_EMPTY_STRING() Mengembalikan rentetan kosong.
RETURN_ARR(r) Mengembalikan tatasusunan. Parameter ialah penunjuk zend_array*.
RETURN_OBJ(r) mengembalikan objek. Parameter ialah penunjuk zend_object*.
RETURN_ZVAL(zv, copy, dtor) mengembalikan sebarang jenis. Parameter ialah penunjuk zval*.
RETURN_FALSE Mengembalikan palsu
RETURN_TRUE Mengembalikan benar

Atas ialah kandungan terperinci Contoh untuk menerangkan nilai pulangan pembangunan sambungan PHP7. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:segmentfault.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!