如何在PHP中为类方法添加别名?

时间:2018-11-26 09:59:47

标签: php class

假设我在PHP中有一个带有序列化数据方法的类。作为英语,我使用 -ISE 的英语拼写。

class Foo
{

    public function serialise($data)
    {
        return json_encode($data);
    }

}

让我们说我的团队中有一位美国开发人员,他试图“序列化”数据( -IZE )。

$foo = new Foo();
$foo->serialize(['one', 'two', 'three']);
// PHP Fatal error: Uncaught Error: Call to undefined method Foo::serialize()

解决此问题的明显方法是对该方法进行别名。我的本能是用美式拼写创建另一种方法,并简单地传递相同的参数。

class Foo
{

    // ...

    public function serialize($data)
    {
        return $this->serialise($data);
    }

}

但这有几个缺点:

  • 我必须匹配参数,如果有更新(容易出错),记得要同时更新这两种方法。
  • 对美国开发人员的附加功能调用意味着代码效率较低。
  • 修改子类中的一个不一定更新另一个。

我的问题是:在PHP中是否有更好的别名作为类方法的方法?一种可以解决我所关心的问题的方法?

1 个答案:

答案 0 :(得分:0)

减轻维护负担的一种方法是使用...运算符接受任意数量的参数,并将其解压缩到转发的调用中:

public function serialize(...$args)
{
    return $this->serialise(...$args);
}

缺点是该函数现在不再具有可以在编辑器中自动完成的签名;您可以在docblock中列出真实的参数,但这会导致问题,因为您需要保持最新状态。

最好的解决方案可能是拥有一个命名约定,并让每个人都学习它,其原因与其他任何编码约定相同:读取一致的代码要容易得多。使用良好的编辑器或IDE,将迅速突出显示并纠正错误的拼写,并且无需额外的复杂性来维护别名。