我有一个关于在PHP中使用Trait和接口的问题。
带有foobar函数的trait
<?php
trait FoobarTrait
{
protected $foobar;
public function setFoobar($foobar)
{
$this->foobar = $foobar
}
public function getFoobar()
{
return $this->foobar;
}
}
指定如何使用Trait的特定接口
<?php
interface FoobarInterface
{
public function setFoobar($foobar);
public function getFoobar();
}
我想在类中使用foobar功能。什么是最好的方法?
有必要用一个接口和指定的trait来实现还是它是一个诱导行为?
<?php
class FoobarClass implements FoobarInterface
{
use FoobarTrait;
}
或
<?php
class FoobarClass
{
use FoobarTrait;
}
感谢您的回复和讨论;)
正如@Federkun在评论中正确指出的那样,"视情况而定"。在我看来,主要是关于你如何使用你的FoobarClass
。
-
如果它是某种服务的实现,可以根据外部条件有多个实现(例如,考虑文件系统或S3处理用户上传),我会使用
FooBarInterface
,因为我可以在使用该服务的其他地方键入提示。 -
如果你只是想避免重复自己,你可以使用trait而不使用接口。或者甚至一个基本的
abstract class AbstractFooBar { ... }
来封装重复的代码。 -
如果你只有一个实现来获取和设置
$fooBar
-只要把它都放在同一个类:)