默认关键字 - 可选函数参数


Default keyword - optional function parameter

当使用可选参数调用PHP函数时,如何指定可选参数保持默认值?其他语言有一个可以使用的default关键字 - substr($str, 0, default)

示例substr($str, 0, null)

我已指定null作为$length参数,因此它将返回一个空字符串,实际上我想要整个字符串。

substr文档中:

如果给定长度且为 0,则返回 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 .

尝试使用这样的东西:

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

手册中的 strlen() 函数

您的问题的完整答案是否定的,PHP 没有任何预定义的默认值常量。链接到具有预定义常量的手册。

但是你可以根据你使用的函数来定义值,比如 strlen() for substr() $length参数。

您也可以通过 call_user_func_array() 根据参数调用函数

例如使用 substr():

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

现场示例在这里

PHP 文档也给了我恶意软件警报。但不用担心,因为还有w3schools:http://www.w3schools.com/php/func_string_substr.asp

根据该网站:

长度

自选。指定返回的字符串的长度。默认值为 字符串的末尾

如果这是你要问的

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

所以myfunc($para)和myfunc($para,$optional)都是有效的