当使用可选参数调用PHP函数时,如何指定可选参数保持默认值?其他语言有一个可以使用的default
关键字 - substr($str, 0, default)
。
示例:substr($str, 0, null)
我已指定null
作为$length
参数,因此它将返回一个空字符串,实际上我想要整个字符串。
从substr
文档中:
如果给定长度且为 0,则返回 FALSE 或 NULL 空字符串。
所以在这种情况下,我不能像往常一样指定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)都是有效的