0

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

示例substr($str, 0, null)

我已经指定null$length参数,所以它会返回一个空字符串,实际上我想要整个字符串。

substr文档中:

如果给出长度并且为0FALSENULL,则将返回一个空字符串。

所以在这种情况下,我不能像往常null一样指定,我也不能指定一个数字。


问题

  • $length参数的默认值是substr多少?
  • 有没有办法将参数指定为默认值,即默认关键字/运算符?

真实例子

我想从格式错误的 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.

4

3 回答 3

1

尝试使用这样的东西:

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

手册中的 strlen() 函数

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

但是您可以定义值取决于您使用的函数,例如 strlen() 用于 substr() $lenght 参数。

您也可以通过 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);

现场示例在这里

于 2013-10-24T12:48:58.550 回答
-1

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

根据网站:

长度

可选的。指定返回字符串的长度。默认是到字符串的末尾

于 2013-10-24T12:22:00.440 回答
-1

如果这是你要问的

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

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

于 2013-10-24T12:22:54.897 回答