久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      實例講解PHP7擴(kuò)展開發(fā)之傳參與返回值

      前言

      這次,我們將演示如何在PHP擴(kuò)展中接受傳入的參數(shù)和輸出返回值。

      <?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")); ?>

      我們將在擴(kuò)展中實現(xiàn)default_value方法。【推薦:《PHP7教程》】

      代碼

      實現(xiàn)default_value方法

      default_value方法的PHP擴(kuò)展源碼:

      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(); }

      代碼說明

      獲取參數(shù)

      在PHP7中提供了兩種獲取參數(shù)的方法。zend_parse_parameters和FAST ZPP方式。

      zend_parse_parameters

      在PHP7之前一直使用zend_parse_parameters函數(shù)獲取參數(shù)。這個函數(shù)的作用,就是把傳入的參數(shù)轉(zhuǎn)換為PHP內(nèi)核中相應(yīng)的類型,方便在PHP擴(kuò)展中使用。
      參數(shù)說明:
      第一個參數(shù),參數(shù)個數(shù)。一般就使用ZEND_NUM_ARGS(),不需要改變。
      第二個參數(shù),格式化字符串。這個格式化字符串的作用就是,指定傳入?yún)?shù)與PHP內(nèi)核類型的轉(zhuǎn)換關(guān)系。

      代碼中 S|z 的含義就是:
      S 表示參數(shù)是一個字符串。要把傳入的參數(shù)轉(zhuǎn)換為zend_string類型。
      | 表示之后的參數(shù)是可選??梢詡?,也可以不傳。
      z 表示參數(shù)是多種類型。要把傳入的參數(shù)轉(zhuǎn)換為zval類型。

      除此之外,還有一些specifier,需要注意:
      !如果接收了一個PHP語言里的null變量,則直接把其轉(zhuǎn)成C語言里的NULL,而不是封裝成IS_NULL類型的zval。
      / 如果傳遞過來的變量與別的變量共用一個zval,而且不是引用,則進(jìn)行強(qiáng)制分離,新的zval的is_ref__gc==0, and refcount__gc==1.

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號