静态方法可以作为公共方法调用吗?

时间:2013-11-24 21:33:21

标签: php oop

我编写了一个小测试场景,用于测试混合使用静态和非静态方法。 当将公共方法作为静态方法调用时,它会生成严格警告。 这让我觉得可能将静态方法称为公共方法会产生类似的警告,但事实并非如此。

将静态方法作为非静态方法调用是否可以?这样做有什么后果吗?

<?php
class TestS {
  static function _testS() {
    echo("Hello Static<br>\n");
    // Strict warning: Non-static method TestS::_tS() should not be
    // called statically in TestS::_tS()
    self::_tS();
  }
  public function _tS() {
    echo("tS<br>\n");
  }
  public function _testP() {
    echo("Hello Public<br>\n");
    self::_tP();
  }
  static function _tP() {
    echo("tP<br>\n");
  }
  public function _testSP() {
    $this->_tP();
  }
}

$test = new TestS();
echo("///////////<br>\n");
$test->_testP();
echo("///////////<br>\n");
TestS::_testS();
echo("///////////<br>\n");
$test->_testSP();
echo("///////////<br>\n");

1 个答案:

答案 0 :(得分:1)

  

将静态方法作为公共方法调用是否可以?

理论上,它是。这是因为静态方法不会在任何地方引用$this,因此在静态调用或作为实例方法调用时它将起作用。

  

这样做有什么后果吗?

明确指出您所使用的方法类型是一种很好的做法;当回顾你的代码时,你会确切知道哪个方法是静态的,因为你调用它的方式,除了在实例方法中使用parent::method()之外。

首先避免使用静态方法也是一种好习惯;如果你有很多,它通常表示代码气味,应该重构。