首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:什么时候使用特性,什么时候使用静态方法?

问PHP:什么时候使用特性,什么时候使用静态方法?
EN

Stack Overflow用户
提问于 2014-04-19 16:56:50
回答 3查看 7.9K关注 0票数 21

我的PHP应用程序通常使用类作为名称空间。这些类中的方法被定义为静态的。

既然PHP已经引入了一些特性,我就想在什么时候使用它们。我看到了一些使用特性的例子,但我认为这可以通过静态类方法轻松地实现。

下面列出了一个使用记录器的非常彻底的示例:Traits in PHP – any real world examples/best practices?

但是,如果您也可以使用静态Logger::log(),那么为什么要使用一个特性呢?我现在唯一能想到的就是很容易地访问$this。我现在面对的另一个例子是用户存在函数。特征,还是静态的方法?

有人能解释一下这件事吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-21 07:53:48

在阅读了有关问题的意见后,我对答案的看法如下:

特性允许扩展类,而不是类层次结构的一部分。不需要像class Book extends Loggable这样的东西,因为Book本身不是一个Loggable,我们只是想要Loggable功能。Loggable中的功能可以填充在一个特性中,因此可以像从它扩展一样使用Book中的Loggable方法。

在类(或命名空间函数)中使用静态方法的优点是,该特性可以访问完整的类范围,也可以访问私有成员。

使用静态函数而不是特性的缺点是类之间的紧密耦合(依赖关系),这会损害可重用性,并会损害单元测试(例如,在使用模拟服务时)。应该在运行时注入依赖项,这确实会增加类/方法实例化的工作量,但它允许在整个应用程序上具有更好的灵活性。这对我来说是一个新的见解。

票数 26
EN

Stack Overflow用户

发布于 2018-03-28 08:51:55

我只对简单的助手方法one-liners使用特性,这是我在几个类中经常需要的。

当没有特征时,我使用了公共静态方法--对于这些特性,也可以将其定义为正常的私有方法。

或者,您可以使用特性来定义基本的虚拟函数,并结合带有接口的类来确保每个方法都存在。

这些特性的优点是,您可以在几个类中使用相同的方法,对于小的更改,您不必在所有类中重写相同的方法。特质只是时间守护者。;)

顺便说一下..。spl_autoload_register也可以处理特性文件的加载。;)

票数 4
EN

Stack Overflow用户

发布于 2014-04-19 17:51:23

特征可以访问对象的私有成员。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23172863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档