php 静态方法特点,PHP中静态方法的缺点

在一个理论数据库访问类中,我发现我在类中使用了很多辅助函数,这些函数与类的实例没有任何关系(以及其他可以使用依赖注入操作与类的实例无关的实例) ).

例如,我有一个函数,它在变量中的两个其他字符串之间获取一个字符串.我一直在考虑将它移动到String_Helper类,或类似的东西.此功能已经变为静态.

另外,我有一个查询数据库,查询($sql)的函数.连接细节由实例提供,但我一直在考虑将其设置为静态,并使用查询($sql,$connection).然后开发人员可以静态地调用它,而根本不需要实例化数据库类.

对我来说,问题是:

>做这样的事情值得吗?像查询函数这样的函数让我想知道这不仅仅是我试图让一切尽可能地保持静态,而没有任何实际需要.在什么情况下你会认为这有用吗?

>我知道静态函数更难测试,但如果我确保他们的代码完全无依赖(或在必要时使用依赖注入),那么它们就像其他所有东西一样容易测试吗?

>目前这不是一个问题,但如果将来我决定使用静态函数扩展类,那么我将无法使当前代码使用我的扩展函数.我想过Singletons,但同样的问题出现了:代码将调用Singleton_Class :: getInstance(),而不是My_Extended_Singleton_Class :: getInstance().依赖注入似乎是解决此问题的唯一方法,但它可能会导致一个笨重的API,因为必须将每个依赖项赋予__construct()上的对象.

>我有一个容器类,它静态地保存某些信息,以便可以在脚本中的任何位置访问它们(全局范围).如果我不能使用静态函数或单例,那么包含不同变量实例的类就会很棒.可以使用例如Container :: $objects [‘MyClass’] = $MyClass_object;,然后其余的代码可以只访问Container :: $objects [‘MyClass’].如果我扩展了MyClass类,我可以使用Container :: $objects [‘MyClass’] = $MyExtendedClass_object;,而使用Container :: $objects [‘MyClass’]的代码将使用MyExtendedClass,而不是MyClass.在我看来,这是迄今为止最好的方法,但我想知道你对它的看法.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值