0

我在 php 中做一些 oop,而当我只是想知道这样做是否好?当我使用时$this->functionName(),它工作正常,我什至尝试使用 self:: 和 static:: 并且它们按我预期的方式工作:

self:: 将使用父方法实现,如果被覆盖(后期静态绑定),静态将使用该方法的最后一个实现。但问题是它被用于非静态函数。这个好吗?它有什么缺点吗??为什么我不应该使用它?

4

1 回答 1

1

有关详细说明,请参阅此答案

一般来说,可以做你描述的事情,PHP 允许这样做。但是请记住,人们习惯于多态性和方法覆盖,因此如果您的基类允许覆盖某些方法,然后使用 aself来调用它,那么我无法更改类行为会很奇怪,尽管它在它的API 作为publicprotected方法。

IMO,它违反了本叔叔的清洁代码书中引用的最小惊讶原则。

static此外,和$this绑定之间也有一些区别,因为static总是会尝试在较窄的范围内引用元素,并不总是合适的范围。此行为在此示例中呈现,并在上面的注释中进行了解释,我在此引用:

在非静态上下文中,被调用的类将是对象实例的类。由于$this->将尝试从同一范围调用私有方法,因此使用static::可能会产生不同的结果。另一个区别是static::只能引用静态属性。

因此,尽管可以在某些适当的static地方使用,但引入关键字是为了使用访问静态方法和字段,并将其用于其他目的应该被认为是令人困惑的。$thisstatic

于 2013-11-02T08:13:40.647 回答