有没有办法显式忽略函数签名中声明的参数

Is there a way to explicitely ignore agruments declared in function signature

有时,尤其是回调函数或 inheritance/implementation 情况下,我不想在方法中使用某些参数。但是它们是方法接口签名所必需的(我无法更改签名,假设这是通过 Composer 需要的东西)。示例:

// Assuming the class implements an interface with this method:
// public function doSomething($usefull1, $usefull2, $usefull3);

public function doSomething($usefull, $useless_here, $useless_here) {
    return something_with($usefull);
}
// ...

在其他一些语言中(比方说 Rust),我可以显式地忽略这些参数,这使代码(和意图)更具可读性。在 PHP 中,可能是这样的:

public function doSomething($usefull, $_, $_) {
    return something_with($usefull);
}

这在 PHP 中可行吗?我错过了什么吗?

旁注:它不仅用于尾随参数,它可以在函数声明中的任何位置

我认为最好的办法就是给它们起唯一的名字,表明它们不会在通话中使用。

也许:

function doSomething($usefull,$x1,$x2){
    return something_with($usefull);
}

或者:

function doSomething($ignore1,$useful,$ignore2){
    return something_with($useful);
}

PHP 想要解释并唯一命名参数。


编辑:如果您想避免声明您不会使用的变量(但您知道它们正在发送),请尝试 func_get_args() and list(). This should make the code lean, clean, readable. (Demo)

function test(){
    // get only use argument 2
    list(,$useful,)=func_get_args();
    echo $useful;
}

test('one','two','three');  // outputs: two

为可选参数分配默认值。

function doSomething($usefull,$useless1=null,$useless2=null){
    return something_with($usefull); 
    }

现在.... 参数 1 是必需的 参数 2 是可选的 参数 3 是可选的

调用函数如..

doSomething($data);
doSomething($data,$anotherData);
doSomething($data,$anotherData,$anotherData1);

您的具体对象与界面不完全匹配,因此您可以在它们之间添加一个适配器 class。所以界面保持原样,您的对象只是得到它真正需要的东西。

class Adapter extends CustomInterface
{
    function doSomething($ignore1,$useful,$ignore2){
        return $customClass->something_with($useful);
    }
}