我编写了一个小测试场景,用于测试混合使用静态和非静态方法。 当将公共方法作为静态方法调用时,它会生成严格警告。 这让我觉得可能将静态方法称为公共方法会产生类似的警告,但事实并非如此。
将静态方法作为非静态方法调用是否可以?这样做有什么后果吗?
<?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");
答案 0 :(得分:1)
将静态方法作为公共方法调用是否可以?
理论上,它是。这是因为静态方法不会在任何地方引用$this
,因此在静态调用或作为实例方法调用时它将起作用。
这样做有什么后果吗?
明确指出您所使用的方法类型是一种很好的做法;当回顾你的代码时,你会确切知道哪个方法是静态的,因为你调用它的方式,除了在实例方法中使用parent::method()
之外。
首先避免使用静态方法也是一种好习惯;如果你有很多,它通常表示代码气味,应该重构。