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")); ?>
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(); }
Perihalan kod
Mendapatkan parameter
Dalam PHP7, dua kaedah mendapatkan parameter disediakan. zend_parse_parameters
Dan 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