除了变量命名之外,没有强制执行任何编码标准。我想知道如何应对这种情况。有时我担心将来会在dailywtf上看到我自己的一些代码!
我试图将其中一些争论纳入其他课程,但在这种情况下它并没有真正有意义。
这是完全没有问题还是应该而且容易纠正的事情?
public function __construct($uCode = '', $uName = '', $uTime = '', $uArea = '', $uDomain = '', $uText = '', $uId = '', $uNum = '', $uVideo = 0, $uAudio = 0, $uImage = 0){
答案 0 :(得分:16)
一般来说,如果你有超过4个参数,最好使用临时对象或数组。通常很多参数都是可选的,这可能会非常尴尬并且很容易出错。所以:
class MyClass {
public function __construct($options) { ... }
...
}
$o = new MyClass(array(
'uCode' => 'some value',
'uText' => 'another value',
));
将其与:
进行比较$o = new MyClass('some value', '', '', '', '', 'another value');
请注意数组版本仅包含您要传递的内容。
答案 1 :(得分:7)
我倾向于倾向于cletus的解决方案,但另一种方法是对构造函数中不一定非必需的任何值使用set()函数。
例如,如果需要$ uCode和$ uName,但其余的是可选的......public function __construct($uCode = '', $uName = '') {}
public function setUTime($uTime) {}
public function setUArea($uArea) {}
...
让你的setter返回$ this有时很有用,所以你可以链接命令,如下所示:
$object = new MyObject($code, $name);
$object->setUTime($time)->setUArea($area)->...;
答案 2 :(得分:5)
使用构建器模式..此处
答案 3 :(得分:0)
如果您有太多参数,则表明您的方法可能做得太多了。尝试将任务分解为许多较小的任务并重构该方法。如果失败,传入一个包含所有参数的类应该没问题。
答案 4 :(得分:0)
您可以将多个参数分配给数组,并将该数组传递给__construct,这样您就只能拥有一个数组参数。
答案 5 :(得分:0)
你可以使用魔术方法
class abc {
private $allowed = array(
'uCode',
'uId'
);
public function __set($name, $value) {
if (in_array($name, $this->allowed)) {
$this->$name = $value;
}
}
public function __call($name, $args) {
if (substr($name, 0, 4) == "set_") {
$var = substr($name, 4);
if (in_array($var, $this->allowed)) {
$this->$var = $args[0];
}
}
}
}
$abc = abc();
$abc->uCode = 123;
$abc->set_uId(123);