private $user;
public function __construct()
{
$this->user = User::getInstance(); //singleton
}
public function methodone()
{
return $this->user->foo();
}
public function methodTwo()
{
return $this->user->foo2();
}
public function methodThree()
{
return $this->user->foo3();
}
我想如果我将user属性设置为实例,我可以在我的方法中重用一个较短的名称(在这种情况下,它不会那么短).我也认为这样做可能会节省一些资源(开始怀疑它),但当我看到其他人的代码时,我很少看到人们这样做.他们通常只会打电话:
User::getInstance()->foo();
User::getInstance()->foo2();
User::getInstance()->foo3();
对此有什么最佳做法吗?也许如果它不是单身人士课你可以这样做吗?或者也许你永远不应该这样做?希望得到一些澄清,谢谢.
编辑:
如果有任何误解,我只是想知道我是否应该创建一个存储实例的属性的第一个例子对此:
public function methodone()
{
return User::getInstance()->foo();
}
public function methodTwo()
{
return User::getInstance()->foo2();
}
public function methodThree()
{
return User::getInstance()->foo3();
}
实际上现在我考虑一下这可能是代码较少,因为我不需要构造函数…
解决方法:
您的方法确实存在一些问题.
>目前尚不清楚您的课程取决于用户类.您可以通过添加User作为构造函数参数来解决此问题.
>单身人士往往是不好的做法.您的代码演示了原因:它是全局可访问的,因此很难使用它跟踪依赖关系(这指向上述问题).
>静态方法经常被用作全局访问点(响应您所看到的人们通常做的User :: method()).全球接入点提供与单身人士相同的问题.它们也有点难以测试.
我也没有看到用新对象重复User对象的重点,除非您使用例如适配器模式.也许如果你能澄清这一点,我将能够提出一个比通用更好的替代方案:
class Foo {
public function __construct(User $user) {
$this->user = $user;
}
public function doXsimplified() {
$this->user->doXbutMoreComplex($arg1,$arg2, $arg20);
}
}