使用' hacks'在编程?

时间:2014-04-09 08:03:33

标签: php arrays

我有这个示例伪代码,$ x基本上是一个带有键和值的对象,或者是带有键和对象作为值的数组。 $ y将以两种不同的方式构建。

private function someFunction($x) {
    if (is_object($x)) {
        $y = 'result of something';
    } elseif (is_array($x)) {
        $y = 'result of something';
    } else {
        $y = null;
    }

    return $y;
}

这是一个很好的做法,如果功能不会在其他任何地方使用? '非hack'方式可能是将对象转换为数组(因为它本质上是一个数组),然后根据数组的数量创建逻辑。

或者我只是在考虑以正确的方式编写代码?

2 个答案:

答案 0 :(得分:2)

在PHP中,这实际上是唯一可行的方法,至少对于类型检查我不会称之为不好的做法。在Java和其他语言中,我们有方法重载:

public String someFunction(Object $x) {
    return "Result of something";
}

public String someFunction(Object[] $x) {
    return "Result of something";
}

public String someFunction(int $y) {
    return "Result of something";
}

在PHP中,我建议类似的关注点如此分开:

private function someFunction($x) {
    if (is_object($x)) {
        $y = $this->someFunctionObject($x);
    } elseif (is_array($x)) {
        $y = $this->someFunctionArray($x);
    } else {
        $y = $this->someFunctionScalar($x);
    }

    return $y;
}


private function someFunctionObject($x) {

}

private function someFunctionArray($x) { 

}

private function someFuctionScalar($x) {

}

PHP等松散类型语言的问题在于实际上有类型,有时你需要处理它们。

我认为每次调用someFunction时都必须进行转换比在内部进行类型检查和转换更糟糕,因为重复的代码比一个方法中的if / else更有问题。

答案 1 :(得分:1)

只要输入由您控制并且您知道要对数据执行什么操作,就可以使用此功能。但是,对于来自外部的非受控来源的输入,您应事先验证数据,因为您不确定数据是否有效。

我不明白的是你如何达到一个点,变量可能是两种不同的类型:数组或对象。

如果你将它转换为数组然后处理它,或者使用你自己的函数,重要的是你的逻辑流程和代码完成它的目的。

如果上下文正确并且代码执行了预期的操作,那么您的代码就可以了。