有没有办法明确忽略函数签名中声明的agruments

时间:2018-01-24 14:18:55

标签: php arguments custom-function

有时候,特别是对于回调函数或继承/实现的情况,我不想在方法中使用一些参数。但它们是方法接口签名所要求的(我无法更改签名,假设它是通过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中可行吗?我错过了什么吗?

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

3 个答案:

答案 0 :(得分:1)

我认为你能想到的最好的就是给他们一个独特的名字,这些名字会暗示他们不会在电话中使用。

也许:

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

或者:

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

PHP希望将参数考虑在内并进行唯一命名。

编辑:如果您想避免声明您不会使用的变量(但您知道它们正在发送),请尝试func_get_args()list()。这应该使代码精简,干净,可读。 (Demo

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

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

答案 1 :(得分:1)

为可选参数指定默认值。

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

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

调用函数,如..

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

答案 2 :(得分:1)

您的具体对象完全不适合接口,因此您只需在它们之间添加适配器类。所以界面保持原样,你的对象就能得到它真正需要的东西。

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