85 php parameters function default-value optional-parameters
好的,我完全忘记了如何在PHP中跳过参数.
让我们说:
function getData($name, $limit = '50', $page = '1') {
...
}
Run Code Online (Sandbox Code Playgroud)
我如何调用此函数以使middle参数采用默认值(即'50')?
getData('some name', '', '23');
Run Code Online (Sandbox Code Playgroud)
以上是否正确?我似乎无法让这个工作.
zom*_*bat 50
你的帖子是正确的.
不幸的是,如果您需要在参数列表的最后使用可选参数,则必须在最后一个参数之前指定所有内容.通常,如果要混合匹配,则为它们提供默认值''or null,如果它们是默认值,则不要在函数内部使用它们.
Pao*_*ino 38
有没有办法"跳过"之外的其他参数,而不是像指定一个默认false或null.
由于PHP在这方面缺乏一些语法糖,你经常会看到这样的东西:
checkbox_field(array(
'name' => 'some name',
....
));
Run Code Online (Sandbox Code Playgroud)
正如评论中雄辩地说的那样,使用数组来模拟命名参数.
这提供了最大的灵活性,但在某些情况下可能不需要.至少你可以将大多数时候没想到的任何东西移动到参数列表的末尾.
Cri*_*tik 35
不,不可能以这种方式跳过论证.只有当它们位于参数列表的末尾时,才可以省略传递参数.
有一个官方提案:https://wiki.php.net/rfc/skipparams,被拒绝了.提案页面链接到有关此主题的其他SO问题.
Aam*_*irR 14
该功能在 PHP 8.0 中实现
PHP 8 引入了命名参数
哪个:
允许任意跳过默认值
参考文档
让我们使用OPs函数function getData($name, $limit = '50', $page = '1')
用法
getData(name: 'some name', page: '23');
Run Code Online (Sandbox Code Playgroud)
htmlspecialchars($string, double_encode: false);
// Same as
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
Run Code Online (Sandbox Code Playgroud)
支持此功能,但命名参数的代码完成除外,看起来更好;)
关于能够跳过可选参数没有任何改变,但是为了正确的语法并且能够为我想要跳过的参数指定NULL,这是我如何做到的:
define('DEFAULT_DATA_LIMIT', '50');
define('DEFAULT_DATA_PAGE', '1');
/**
* getData
* get a page of data
*
* Parameters:
* name - (required) the name of data to obtain
* limit - (optional) send NULL to get the default limit: 50
* page - (optional) send NULL to get the default page: 1
* Returns:
* a page of data as an array
*/
function getData($name, $limit = NULL, $page = NULL) {
$limit = ($limit===NULL) ? DEFAULT_DATA_LIMIT : $limit;
$page = ($page===NULL) ? DEFAULT_DATA_PAGE : $page;
...
}
Run Code Online (Sandbox Code Playgroud)
这可以这样getData('some name',NULL,'23');调用:并且将来调用该函数的任何人都不需要记住每次的默认值或为它们声明的常量.
简单的答案是否定的。但是为什么在重新排列参数时跳过会实现这一点呢?
你的是“默认函数参数的错误使用”,不会像你期望的那样工作。
PHP 文档中的附注:
使用默认参数时,任何默认值都应该在任何非默认参数的右侧;否则,事情将不会按预期进行。
考虑以下:
function getData($name, $limit = '50', $page = '1') {
return "Select * FROM books WHERE name = $name AND page = $page limit $limit";
}
echo getData('some name', '', '23'); // won't work as expected
Run Code Online (Sandbox Code Playgroud)
输出将是:
"Select * FROM books WHERE name = some name AND page = 23 limit"
Run Code Online (Sandbox Code Playgroud)
默认函数参数的正确用法应该是这样的:
function getData($name, $page = '1', $limit = '50') {
return "Select * FROM books WHERE name = $name AND page = $page limit $limit";
}
echo getData('some name', '23'); // works as expected
Run Code Online (Sandbox Code Playgroud)
输出将是:
"Select * FROM books WHERE name = some name AND page = 23 limit 50"
Run Code Online (Sandbox Code Playgroud)
在非默认值之后将默认值放在您的右侧,以确保如果未定义/给出该变量,它将始终重新调整该变量的默认值这是一个参考链接以及这些示例的来源。
编辑:将其设置null为其他人建议的可能有效并且是另一种选择,但可能不适合您想要的。如果未定义,它将始终将默认值设置为 null。