我正在用 php 做一些 oop,当我只是想知道这样做是否好吗?当我使用 $this->functionName()
时,它工作正常,我什至尝试使用 self:: 和 static:: 它们按我预期工作:
self:: 将使用父方法实现,如果被重写,静态将使用方法的最后一个实现(后期静态绑定)。 但问题是它被用于非静态函数。 这样好吗? 它有什么缺点吗? 为什么我不应该使用它?
有关详细说明,请参阅此答案。
一般来说,可以做你描述的事情,PHP 允许它。但请记住,人们习惯于多态性和方法覆盖,所以如果你的基类允许覆盖某个方法,然后使用self
来调用它,那么我无法更改类行为会很奇怪,尽管它在其 API 中将其公开为 public
或 protected
方法。
IMO,它违反了本叔叔的清洁代码书中引用的最小惊讶原则。
此外,static
绑定和$this
绑定之间存在一些差异,因为static
总是尝试在较窄且并不总是合适的范围内引用元素。此示例中介绍了此行为,并在上面的注释中进行了说明,我在此处引用了该注释:
在非静态上下文中,被调用的类将是对象实例的类。由于
$this->
将尝试从同一范围调用私有方法,因此使用static::
可能会给出不同的结果。另一个区别是static::
只能引用静态属性。
因此,尽管可以在一些合适的地方使用 static
$this
,但引入static
关键字是为了使用静态方法和字段,将其用于其他目的应被视为混淆。