内容简介:翻译自:https://stackoverflow.com/questions/524647/what-things-are-best-not-done-in-a-constructor
我首先提出了一个问题:“在构造函数上执行单元测试的最佳方法是什么(例如, PHP
5中的__construct())”,但在阅读相关问题时,我看到几条评论似乎表明设置成员变量或在构造函数中执行任何复杂的操作都是no-nos.
这里讨论的类的构造函数接受一个参数,对它执行一些操作(确保它通过嗅探测试,并在必要时进行转换),然后将其存储在成员变量中.
我认为这样做的好处是:
1)客户端代码永远是
肯定有这个价值
每当一个对象成员变量
这个类的实例化,和
2)它在客户端代码中保存了一个步骤
(其中一个可以想象得到
错过了,例如,
$Thing = new Thing; $Thing->initialize($var);
什么时候我们可以做到这一点
$Thing = new Thing($var);
并完成它.
这是不是吗?如果是这样的话?
这在C讨论中出现了很多,我得到的一般结论是这样的:
如果对象没有获取任何外部资源,则必须在构造函数中初始化成员.这涉及在构造函数中完成所有工作.
>(x,y)坐标(或者实际上任何其他只是一个美化元组的结构)
>美国州名缩写查找表
如果对象获取了它可以控制的资源,则可以在构造函数中分配它们:
>打开文件描述符
>分配内存
>处理/指针到外部库
如果对象获取了无法完全控制的资源,则必须在构造函数之外分配它们:
> TCP连接
>数据库连接
>弱参考
总有例外,但这涵盖了大多数情况.
翻译自:https://stackoverflow.com/questions/524647/what-things-are-best-not-done-in-a-constructor
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Java构造函数与普通函数用法详解
- 构造函数、原型、原型链、继承
- Vue源码: 构造函数入口
- Hashmap源码解析-构造函数
- JavaScript 构造函数的继承
- Swift学习之构造函数与析构函数
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。