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

Php 默认关键字-可选函数参数,php,Php,当使用可选参数调用PHP函数时,如何指定一个参数,使可选参数保持默认值?其他语言有一个可以使用的default关键字-substr($str,0,default) 示例:substr($str,0,null) 我指定了null作为$length参数,因此它将返回一个空字符串,实际上我需要整个字符串 从substr文档中: 如果给定的长度为0,FALSE或NULL将返回一个空字符串 因此,在这种情况下,我不能像通常那样指定null,也不能指定数字 问题 substr的$length参数的默认值

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

示例
substr($str,0,null)

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

substr
文档中:

如果给定的长度为0FALSENULL将返回一个空字符串

因此,在这种情况下,我不能像通常那样指定
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

PHP文档也会向我发出恶意软件警报。但不要担心,因为还有很多学校:

根据该网站:

长度

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


如果这是你要问的

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

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

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

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

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

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

例如,substr()


不幸的是,我现在无法访问PHP文档,Google报告了恶意软件的泛滥。相反,我一直在引用我的IDE文档,所以我希望答案不是显而易见的。你是通过谷歌搜索访问这些文档的吗?这也发生在我身上,所以我只是将docs addrees直接放在地址栏上。
如果省略了长度,则将返回从开始到字符串结束的子字符串。
@jasonoo,我知道,这就是我想要做的(拥有完整的字符串)。但是我还想指定
$length
参数作为默认值。似乎没有人真正理解我的意思,我编辑了这个问题以澄清(希望如此)。我还有其他方法可以做到这一点,我只是想知道它,没有真正的问题。我想发布W3傻瓜布拉布拉的东西,但后来我意识到没有其他选项可以很好地解释它与php.net关闭:(.谢谢,但我想发送默认参数。例如
substr($str,0,默认值)
.PHP有一个
default
关键字,但这是用于switch语句的。@Drahcir wht应该是default的长度?@crook\u Sense10,我不明白你的问题,default不是一个数字。谢谢,但不,这不是我要问的。谢谢,它可以工作,但它并不能真正回答问题。
<?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);