如何在循环中使用变量function-name?

时间:2017-07-18 19:19:37

标签: php loops

我用PHP OOP做了这个循环:

for($i=1;$i<=5;$i++){ 
echo "
    <tr>
    <td>$i</td>
    <td>".$menuSet->GetMenuLink1()."</td>
    <td>
        <a title='Edit' href='#'><span class='glyphicon glyphicon-pencil'></span></a>&nbsp; 
        <a title='Remove' href='#'><span class='glyphicon glyphicon-remove'></span></a>
    </td>
    </tr>
";
// replace $menuSet->GetMenuLink1() with another variable
}

正如您所看到的,我想将$menuSet->GetMenuLink1()变量替换为$menuSet->GetMenuLink2(),此循环一直持续到$menuSet->GetMenuLink5()

(向GetMenuLink函数添加1)

那我怎么能在php中做到这一点?

3 个答案:

答案 0 :(得分:1)

这听起来像真的糟糕的设计模式 - 如果可能的话,你应该避免它。但是你问的方式是可行的。要正确地执行此操作,您应该重建函数以使用您使用的参数,因此您拥有GetMenuLink(1)GetMenuLink(2)而不是GetMenuLink1()GetMenuLink2()

function getMenuLink($i) {
    // Code for the function goes here
    // Adapt for usage of an arugment, e.g. if ($i == 1) { ... }
    // Use $i to get the link you wish to produce
}

如果由于某些模糊原因而无法实现,请使用函数名称定义变量,并将其用作$variable(),如下所示。这称为变量函数。但是,我强烈建议您重新构建函数以取代参数,并避免使用这样的解决方案。

for ($i=1; $i <= 5; $i++){
    $method_name = "GetMenuLink".$i;
    echo "
        <tr>
        <td>$i</td>
        <td>".$menuSet->$method_name()."</td>
        // .....

答案 1 :(得分:0)

虽然这不是最好的设计,但您可以使用call_user_funcarray包含您要调用的方法。在您的情况下,您可以执行以下操作:

call_user_func(array($menuSet, 'GetMenuLink' . $i));

使用PHP的callable数组。

但就个人而言,我建议重构一下。在类中,在名为GetMenuLinks或类似的方法中执行此处理。

答案 2 :(得分:0)

PHP实际上在从变量调用函数方面非常自由。我不记得它的名字是什么,但你可以做到这一点:

qApp.processEvents()

** 不确定这是一个好主意你可能想看看其他模式