第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

PHP是不許函數(shù)重載的,但為什么它有幾個(gè)implode()函數(shù)?

PHP是不許函數(shù)重載的,但為什么它有幾個(gè)implode()函數(shù)?

PHP
有只小跳蛙 2019-03-07 23:07:25
string implode(array $pieces)將一維數(shù)組$pieces的每個(gè)元素值轉(zhuǎn)換為字符串并連接起來(lái)。string implode(string $glue, array $pieces)將一維數(shù)組$pieces的每個(gè)元素值轉(zhuǎn)換為字符串并用$glue連接起來(lái)。string implode(array $pieces, string $glue="")將一維數(shù)組$pieces的每個(gè)元素值轉(zhuǎn)換為字符串并用$glue連接起來(lái)。Note:implode()可以接收兩種參數(shù)順序,這是歷史原因。實(shí)例一: <?php $test=["a","b","c"]; var_dump(implode($test)); ?> 實(shí)例二: <?php $test=["a","b","c"]; var_dump(implode("|",$test)); ?> 實(shí)例三: <?php $test=["a","b","c"]; var_dump(implode($test,"|")); ?>
查看完整描述

3 回答

?
繁華開(kāi)滿天機(jī)

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊

這不是重載,也并不是允許重載的意思。
手冊(cè)上也說(shuō)了 歷史原因,所謂的歷史原因:
就是Perljoin函數(shù)參數(shù)順序和早期開(kāi)發(fā)人員習(xí)慣的一些沖突

比如早期為了保證第二個(gè)參數(shù)是OPTIONAL就將函數(shù)設(shè)定為了如下方式,這樣的好處是可以不傳遞第二參數(shù),直接將數(shù)組連接起來(lái)。

implode(array $arr, string $glue = '');
implode(array $arr); //這樣就可以達(dá)到不傳遞第二個(gè)參數(shù)

后來(lái)為了規(guī)范改成了Perljoin參數(shù)順序:

join EXPR,LIST

也就是字符串參數(shù)在前,
但是在編程過(guò)程中,很大部分時(shí)間內(nèi)都無(wú)需連接的字符串(第一個(gè)參數(shù)),

implode('', $arr);

如果傳遞一個(gè)空字符串,浪費(fèi)機(jī)器性能,所以,就保留了歷史寫(xiě)法。
這也是PHP唯一的可以亂寫(xiě)順序的函數(shù)。

相比jQueryanimate的參數(shù)順序,這算小巫見(jiàn)大巫了。

jQuery 的 animate 除了 第一個(gè)參數(shù)外,后面的順序都可以如下方式,這已經(jīng)叫夠亂了。(它是通過(guò)參數(shù)類型區(qū)分的)

jQuery('#id').animate({left: 100}, function() {
    //callback
});
jQuery('#id').animate({left: 100}, 3000, function() {
    //callback
});
jQuery('#id').animate({left: 100}, 1500, 'linear', function() {
    //callback
});

要說(shuō)這個(gè)函數(shù)的實(shí)現(xiàn),也只有一個(gè)C的實(shí)現(xiàn),
「重載」方法并不復(fù)雜,就是判斷arg的參數(shù)數(shù)量、類型,源碼
下面PHP的C源碼中,對(duì)于參數(shù)的順序處理也并不復(fù)雜

/* {{{ proto string implode([string glue,] array pieces)
   Joins array elements placing glue string between items and return one string */
PHP_FUNCTION(implode)
{
    zval *arg1, *arg2 = NULL, *pieces;
    zend_string *glue;

    ZEND_PARSE_PARAMETERS_START(1, 2)
        Z_PARAM_ZVAL(arg1)
        Z_PARAM_OPTIONAL
        Z_PARAM_ZVAL(arg2)
    ZEND_PARSE_PARAMETERS_END();

//如果參數(shù)2是空 并且參數(shù)是 數(shù)組
    if (arg2 == NULL) {
        if (Z_TYPE_P(arg1) != IS_ARRAY) {
            php_error_docref(NULL, E_WARNING, "Argument must be an array");
            return;
        }

        glue = ZSTR_EMPTY_ALLOC();
        pieces = arg1;
    } else {
        if (Z_TYPE_P(arg1) == IS_ARRAY) { //參數(shù)1是數(shù)組
            glue = zval_get_string(arg2);
            pieces = arg1;
        } else if (Z_TYPE_P(arg2) == IS_ARRAY) { //參數(shù)2是數(shù)組
            glue = zval_get_string(arg1);
            pieces = arg2;
        } else { //報(bào)錯(cuò)
            php_error_docref(NULL, E_WARNING, "Invalid arguments passed");
            return;
        }
    }

    php_implode(glue, pieces, return_value);
    zend_string_release(glue);
}
/* }}} */
查看完整回答
反對(duì) 回復(fù) 2019-03-18
?
慕勒3428872

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個(gè)贊

function test(){
    $args = func_get_args(); 在函數(shù)中可以得到傳遞的參數(shù)
    echo $args[0];
}

test('123')
輸出 123

查看完整回答
反對(duì) 回復(fù) 2019-03-18
?
肥皂起泡泡

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊

你是從別的語(yǔ)言轉(zhuǎn)過(guò)來(lái)的吧,大兄弟。如果你是一個(gè)PHPER,看到這個(gè)問(wèn)題可能會(huì)一臉懵逼,PHP不是天然就是這樣的么? 你腦子里的那一套是強(qiáng)類型語(yǔ)言的,不要直接套到PHP上面來(lái)。PHP是非常靈活的弱類型腳本語(yǔ)言,所以函數(shù)的寫(xiě)法跟強(qiáng)類型語(yǔ)言是不一樣,好壞不討論,見(jiàn)仁見(jiàn)智.

查看完整回答
反對(duì) 回復(fù) 2019-03-18
  • 3 回答
  • 0 關(guān)注
  • 528 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)