如何缩短此PHP代码以使其更通用?

如何缩短此PHP代码以使其更通用?,php,optimization,Php,Optimization,对于阅读本文的PHP大师,我相信您会理解我在这里寻找的内容。我正在寻找一种通用的方法来完成我已经在做的事情。目前,我支持一个方法值,它最多有6个方法名,用|字符分隔。如果我想支持n个方法,其中n可以是任意数字,那么我如何转换下面的代码呢。我基本上是在寻找有助于减少当前代码量的语法 // example value for $method // $method = 'getProjectObject|getProgramObject|getName'; $methods = explode('

对于阅读本文的PHP大师,我相信您会理解我在这里寻找的内容。我正在寻找一种通用的方法来完成我已经在做的事情。目前,我支持一个方法值,它最多有6个方法名,用|字符分隔。如果我想支持n个方法,其中n可以是任意数字,那么我如何转换下面的代码呢。我基本上是在寻找有助于减少当前代码量的语法

// example value for $method 
// $method = 'getProjectObject|getProgramObject|getName';

$methods = explode('|', $method);
if (sizeof($methods) == 1) {
    $value = $object->$method();
}
else if (sizeof($methods) == 2) {
    $value = $object->$methods[0]()->$methods[1]();
}
else if (sizeof($methods) == 3) {
    $value = $object->$methods[0]()->$methods[1]()->$methods[2]();
}
else if (sizeof($methods) == 4) {
    $value = $object->$methods[0]()->$methods[1]()->$methods[2]()->$methods[3]();
}
else if (sizeof($methods) == 5) {
    $value = $object->$methods[0]()->$methods[1]()->$methods[2]()->$methods[3]()->$methods[4]();
}
else if (sizeof($methods) == 6) {
    $value = $object->$methods[0]()->$methods[1]()->$methods[2]()->$methods[3]()->$methods[4]()->$methods[5]();
}

您可以使用一些循环,如
foreach

$methods = explode('|', $method);
foreach ($methods as $method) {
    $object = $object->$method();
}
$value = $object;

StackOverflow不是这个问题的合适位置。我们不会为您编写代码。你需要自己编写代码,如果你不确定为什么有些东西不能按预期工作,那么在发布代码时解释一下你期望它做什么,以及它实际在做什么,包括所有错误消息。请参阅。使用for循环
for($i=0;$i
这太可怕了。。。最好的简化方法是在鸡尾酒餐巾纸阶段完全放弃这一点,从头开始。尽管下面的答案对于您的目的来说很好,但我想指出的是,很多条件(ifelse)通常表明您需要使用
开关(){}
。当然,在您的例子中,代码过于重复,使得循环成为更好的选择。
$methods = explode('|', $method);
$ret = $object;
foreach ($methods as $method)
{
    $ret = $ret->$method();
}
return $ret;