首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过对象调用静态方法是不好的做法吗?

通过对象调用静态方法是不好的做法吗?
EN

Stack Overflow用户
提问于 2018-10-08 10:34:46
回答 1查看 1.4K关注 0票数 4

我发现在某些用例中通过对象调用静态方法非常方便。

我想知道这是否被认为是一种糟糕的做法?

还是在将来的PHP版本中删除这个特性?

代码语言:javascript
复制
class Foo
{
    public static function bar ()
    {
        echo 'hi';
    }
}

class SubFoo extends Foo
{
    public static function bar ()
    {
        echo 'hi subfoo';
    }
}

// The normal way to call a static method.
Foo::bar(); // => "hi"

// Call the static method via instance.
$foo = new Foo;
$foo::bar(); // => "hi"


// Here is the use case I found calling static method via instance is convenient.
function callbar(Foo $foo) 
{
  // The type-hinting `Foo` can be any subclass of `Foo`
  // so I have to figure out the class name of `$foo` by calling `get_class`.
  $className = get_class($foo);
  $className::bar();

  // Instead of the above, I can just do `$foo::bar();`
}

callbar(new SubFoo); // => "hi subfoo"
EN

回答 1

Stack Overflow用户

发布于 2018-10-08 10:56:06

一般来说,使用静态方法是错误的做法,因为:

  1. 实际上,静态方法或静态变量是全局变量。
  2. 静态代码会在测试中造成许多麻烦。
  3. 静态代码使代码的各个部分之间具有高度的内聚力。
  4. 静态代码在代码的各个部分之间形成隐藏的依赖关系。

但是,在某些情况下,使用静态代码是合理的。例如:

  1. 方法引用类,而不引用对象
  2. 没有状态的助手或Util类
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52700402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档