php - 我什么时候应该使用 "final"?

标签 php final

在日常编程(Web 或其他方式)中,我应该将类或方法声明为 Final 是否有任何特殊原因?请提供一个应该使用它的真实示例。

顺便说一句,我问是因为我想 pick an 'obscure' keyword and master it .

最佳答案

它可以防止其他程序员对您的类执行您不希望他们执行的操作。因此,与其发表评论说“不要使用此类来执行 XXX”,您可以以这样的方式设计它,使他们不会试图以这种方式覆盖它并滥用它。

编辑:由于需要一个示例,我将描述一个您可能会发现这个关键字很方便的情况...假设您有一个类定义两个对象如何相互通信,比如说,监听者和通知者。监听器类显然必须允许继承,但您可能希望将通知器类设置为最终类,以便它必须以“has-a”关系使用。这样,您就可以从监听器对象中对它们接收的消息的性质做出一些假设。

否则,就有可能从该类继承,做各种疯狂的事情,比如扩展消息等等。如果您不希望其他程序员这样做,那么您可以将该类设为最终类。此外,这在广泛使用的公共(public) API 中可能更有意义,因为它还允许其他程序员轻松理解哪些类可以进行子类化。

另一个例子 - 假设您有一个基于缓冲区的流处理器,并且在 read()/write() 方法内部,您维护一些有关对象当前状态的数据(即当前字节或其他内容) 。没有办法保证任何子类化这个类的人都会在处理过程中调用 super 方法——并且由于这样的类可能只包含几个方法,所以最好将整个方法定为 final方法,而不是每个方法。这再次迫使人们使用该类“has-a”,而不是“is-a”,因此可以控制您期望代码的执行方式。

我同意你的观点,将整个最终化可能是你千载难逢的事情,但是如果你选择的话,PHP 具有这种功能是很好的锻炼一下。

关于php - 我什么时候应该使用 "final"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/526312/

相关文章:

java - Android:Java 不能引用非最终变量

java - 是什么导致了这个 "possible loss of precision"错误?

java - 更改需要声明为final的局部变量的值

php - google analytics api 查询特定的 url

php - MySQL - 仅当同一表但不同行中没有设置获胜者时才选择帖子 ID。包含示例代码

php - 一般网络编程/设计问题 :?

list - 代码质量/ Guava : clear and fill a final list or assign a new Immutablelist

java - 最终字段和不可变类

java - 如果在 WSDL 中定义了 `xsd:struct` (Key => Value Map),如何处理 Wsdl2Java?

php - 在 windows 7 64 位上带有 php 的 MongoDb