【问题标题】:How to alias a class method in PHP?如何在 PHP 中给类方法起别名?
【发布时间】:2018-11-26 09:59:46
【问题描述】:

假设我在 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 中为类方法设置别名?一种可以解决我的顾虑的方法?

【问题讨论】:

  • @AleksandarRakić 将给类起别名,而不是方法
  • 有些德语开发人员在他们的功能中使用德语单词.. 他们不应该... 只使用标准和常用方法名称序列化。我不认为你可以在 PHP 中重命名/别名类方法
  • 大多数用户会输入ser,然后使用代码完成提供的任何内容。 ;)

标签: php class


【解决方案1】:

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

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

缺点是该函数现在不再具有可以在编辑器中自动完成的签名;您可以在 docblock 中列出真正的参数,但这会破坏这一点,因为您需要使其保持最新。

最好的解决方案可能是有一个命名约定,并让每个人都学习它,原因与任何其他编码约定相同:阅读一致的代码要容易得多。使用好的编辑器或 IDE,错误的拼写会很快被突出显示并更正,而且维护别名也不会增加额外的复杂性。

【讨论】:

  • 接口对命名约定有很大帮助。尤其是当 IDE 可以自动为所需方法添加存根时。
猜你喜欢
  • 2012-10-06
  • 2010-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-07
  • 1970-01-01
  • 1970-01-01
  • 2015-02-16
相关资源
最近更新 更多