嘿,我是大学毕业生.我正在开发一个项目,我希望最终能够由其他人维护.我在这个项目中遇到了令人烦恼的情况,那就是需要很多私有变量的对象,因此需要很长的构造函数.
除了变量命名之外,没有强制执行任何编码标准.我想知道如何应对这种情况.有时我担心将来会在dailywtf上看到我自己的一些代码!
我试图将其中一些争论纳入其他课程,但在这种情况下它并没有真正有意义.
这是完全没有问题还是应该且容易纠正的问题?
public function __construct($uCode = '', $uName = '', $uTime = '', $uArea = '', $uDomain = '', $uText = '', $uId = '', $uNum = '', $uVideo = 0, $uAudio = 0, $uImage = 0){
Run Code Online (Sandbox Code Playgroud)
cle*_*tus 16
一般来说,如果你有超过4个参数,你最好使用临时对象或数组.通常很多参数都是可选的,这可能会非常尴尬并且很容易出错.所以:
class MyClass {
public function __construct($options) { ... }
...
}
$o = new MyClass(array(
'uCode' => 'some value',
'uText' => 'another value',
));
Run Code Online (Sandbox Code Playgroud)
比较一下:
$o = new MyClass('some value', '', '', '', '', 'another value');
Run Code Online (Sandbox Code Playgroud)
请注意数组版本如何仅包含您要传递的内容.
我倾向于倾向于cletus的解决方案,但另一种方法是使用set()函数用于构造函数中不一定非必需的任何值.
例如,如果需要$ uCode和$ uName,但其余的是可选的......
public function __construct($uCode = '', $uName = '') {}
public function setUTime($uTime) {}
public function setUArea($uArea) {}
...
Run Code Online (Sandbox Code Playgroud)
让setter返回$ this有时会很有用,所以你可以链接命令,如下所示:
$object = new MyObject($code, $name);
$object->setUTime($time)->setUArea($area)->...;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
511 次 |
| 最近记录: |