假设我在 PHP 中有一个类,它有一个序列化数据的方法。作为英语,我使用-ISE的英语拼写。
class Foo
{
public function serialise($data)
{
return json_encode($data);
}
}
Run Code Online (Sandbox Code Playgroud)
假设我的团队中有一位美国开发人员试图“序列化”数据(-IZE)。
$foo = new Foo();
$foo->serialize(['one', 'two', 'three']);
// PHP Fatal error: Uncaught Error: Call to undefined method Foo::serialize()
Run Code Online (Sandbox Code Playgroud)
解决这个问题的显而易见的方法是给方法添加别名。我的直觉是用美式拼写创建另一种方法并简单地传递相同的参数。
class Foo
{
// ...
public function serialize($data)
{
return $this->serialise($data);
}
}
Run Code Online (Sandbox Code Playgroud)
但这有几个缺点:
我的问题是:有没有更好的方法来为 PHP 中的类方法设置别名?一种可以解决我所担心的问题的方法?
这可以使用接口和特征来实现,如下所示:
SerializeInterface.php(PHP 已使用名称“Serializable”,因此我在这里为接口使用非常规名称。):
interface SerializeInterface
{
public function serialize($data);
}
Run Code Online (Sandbox Code Playgroud)
SerializeableTrait.php:
require_once('SerializeInterface.php');
trait SerializableTrait
{
public function serialize($data)
{
return json_encode($data);
}
}
Run Code Online (Sandbox Code Playgroud)
Foo.php
require_once('SerializeInterface.php');
require_once('SerializableTrait.php');
class Foo implements SerializeInterface
{
use SerializableTrait;
use SerializableTrait {
SerializableTrait::serialize as serialise;
}
}
$foo = new Foo();
print $foo->serialize(['one', 'two', 'three']).PHP_EOL;
print $foo->serialise(['four', 'five', 'six']).PHP_EOL;
Run Code Online (Sandbox Code Playgroud)
Foo.php 的输出:
["one","two","three"]
["four","five","six"]
Run Code Online (Sandbox Code Playgroud)
一些注意事项:
如上所述,这确实允许使用两种拼写,并且允许仅在一个位置(在 SerializedTrait.php 中)更新该函数。它还具有额外的好处(相对于 IMSoP 使用“...$args”的答案),这仍然允许在大多数编辑器中完成代码。
| 归档时间: |
|
| 查看次数: |
828 次 |
| 最近记录: |