默认关键字 - 可选功能参数

时间:2013-10-24 12:18:03

标签: php

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

示例substr($str, 0, null)

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

来自substr文档:

  

如果长度为 0 FALSE NULL ,则会返回空字符串。

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


问题

  • $length的{​​{1}}参数的默认值是什么?
  • 有没有办法将参数指定为默认值,即默认关键字/运算符?

真实示例

我想从格式不正确的网址中提取主机名。

substr

在上面的示例中,$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

3 个答案:

答案 0 :(得分:1)

尝试使用以下内容:

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

strlen() function in manual

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

但你可以定义值取决于你使用的函数,如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);

实例here

答案 1 :(得分:-1)

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

根据网站:

  

长度

     

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

答案 2 :(得分:-1)

如果这是你要问的话

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

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

相关问题