2013-10-24 33 views
0

使用可選參數調用PHP函數時,如何指定可選參數保持爲默認值?其他語言有一個default關鍵字可以使用 - substr($str, 0, default)默認關鍵字 - 可選函數參數

substr($str, 0, null)

我已指定null$length參數,所以它會返回一個空字符串,實際上我想整個字符串。

substr文檔:

如果長度給出並且是,FALSENULL一個空字符串將被返回。

所以在這種情況下,我不能指定null,因爲我通常會,我也不能指定一個數字。


問題

  • 什麼是substr$length參數的默認值?
  • 有沒有辦法將參數指定爲默認值,即默認的關鍵字/運算符?

實證

我想從一個格式化的不良URL中提取的主機名。

$url = 'example.com'; 

if(!$host = parse_url($url, PHP_URL_HOST)) 
{ 
    //There is no URL protocol so parse_url won't work 
    $host = substr($url, 0, strpos($url, '/') ?: null); 
} 

echo $host; 

在上面的例子$host是一個空字符串,因爲$url不含任何正斜槓(/)。如果你在$url的末尾添加一個斜線,那麼它工作正常($url = 'example.com/')。

我意識到我只能使用if子句而不是三元組,但我想知道是否有任何方式發送默認參數而不是null

+0

不幸的是,我無法在訪問PHP文檔:

您也可以根據通過call_user_func_array)參數(

例如用SUBSTR()調用函數這一次,Google報告了惡意軟件感染。相反,我一直在提及我的IDE文檔,所以我希望答案不明顯。 – Drahcir

+0

您是否通過Google搜索訪問了文檔?它也發生在我身上,所以我只是直接在地址欄上放置docs addreess。 – DontVoteMeDown

+0

'如果省略了長度,則從字符串的開始到結尾的字符串將被返回。' –

回答

1

嘗試使用這樣的:

$host = substr($url, 0, strpos($url, '/') ?: strlen($url)); 

strlen() function in manual

你的問題的完整答案是NO,PHP沒有任何預定義常量到默認值。鏈接到手冊predefined constants

但是你可以定義值取決於你使用strlen()函數的substr()$ lenght參數。

<?php 
    $url = 'example.com/123'; 
    $params = array($url, 0); 
    $tmp = strpos($url, '/') ? strpos($url, '/'): null; 
    if(!is_null($tmp)) 
     array_push($params ,$tmp); 

    $result = call_user_func_array('substr', $params); 

    var_dump($result); 

活生生的例子here

+0

謝謝,它會工作,但它並沒有真正回答這個問題。 – Drahcir

+0

看到我更新的帖子 – dododo

-1

PHP文檔也給我惡意軟件警報。但不擔心,因爲在那裏也W3Schools的:http://www.w3schools.com/php/func_string_substr.asp

根據網站:

長度

可選。指定返回的字符串的長度。 默認爲 字符串末尾

+0

我想發佈w3fools blabla thingy,但後來我意識到沒有其他選項,它解釋了它足夠好與php.net下:(:(#)(#) –

+1

這是一箇舊鏡像:http://php.mirrors.pair.com/ manual/en/function.substr.php – Patrick

+0

謝謝,但我想發送默認參數,例如'substr($ str,0,default)'.PHP有一個'default'關鍵字,但這是用於switch語句的。 – Drahcir

-1

如果這是你問

function myfunc($para1,$optional_para = null){ 
    //do stuff 
} 

這樣既MYFUNC($段)和MYFUNC($段,$可選)是有效的

+0

謝謝,但不是,這不是我要求的。 – Drahcir