【问题标题】:Combine PHP Function Arguments into a String将 PHP 函数参数组合成一个字符串
【发布时间】:2012-08-02 19:07:07
【问题描述】:

我多次调用getContent() 函数,其参数使用func_get_args() 拉入函数。有几个参数保持不变,我想将它们设置为一个变量,以防止在所有这些函数调用中重复重复的参数。

这是一个带有完整参数的函数调用示例:

<? getContent(
    "article",
    "display:list",
    "find_series:team",
    "find_category:pastors-team",
    "order:series",
    "find_parent_category:team",
    "show:<div class='box box_stories'>",
    "show:<div class='box_pad box_img bwWrapper'>",
    "show:<div class='box_inner_pad'>",
    "show:<h3><a href='/staff-detail/__slug__'>__authorX__</a></h3>",
    "show:<p class='teamsummary'>__summary__</p>",
    "show:<p class='phone_icon'>__authorXworkphone__</p>",
    "show:</div>",
    "show:</div>",
    "show:</div>"
); 
?>

理想情况下,我可以这样做:

<? $myStyle = 
    "show:<div class='box box_stories'>",
    "show:<div class='box_pad box_img bwWrapper'>",
    "show:<div class='box_inner_pad'>",
    "show:<h3><a href='/staff-detail/__slug__'>__authorX__</a></h3>",
    "show:<p class='teamsummary'>__summary__</p>",
    "show:<p class='phone_icon'>__authorXworkphone__</p>",
    "show:</div>",
    "show:</div>",
    "show:</div>";

getContent(
    "article",
    "display:list",
    "find_series:team",
    "find_category:leadership-team",
    "order:series",
    "find_parent_category:team",
    $myStyle
);

getContent(
    "article",
    "display:list",
    "find_series:team",
    "find_category:executive-team",
    "order:series",
    "find_parent_category:team",
    $myStyle
); ?>

这可能吗?解决这个问题的最佳方法是什么?

注意:我无法更改 getContent() 函数,它是 CMS 的核心函数

【问题讨论】:

    标签: php function arguments


    【解决方案1】:

    这是我能想到的最简单的一个:

    call_user_func_array('getContent',array_merge(array(
        "article",
        "display:list",
        "find_series:team",
        "find_category:executive-team",
        "order:series",
        "find_parent_category:team",
        ),$myStyle)
    );
    

    编辑:Yazmat 的解决方案可能会更好。
    您可以将它与可变数量的参数一起使用,如下所示:

    <?php
    function myGetContent() {
        $defaults = array(
            "show:<div class='box box_stories'>",
            "show:<div class='box_pad box_img bwWrapper'>",
            "show:<div class='box_inner_pad'>",
            "show:<h3><a href='/staff-detail/__slug__'>__authorX__</a></h3>",
            "show:<p class='teamsummary'>__summary__</p>",
            "show:<p class='phone_icon'>__authorXworkphone__</p>",
            "show:</div>",
            "show:</div>",
            "show:</div>"
        );
        return call_user_func_array('getContent',array_merge(func_get_args(), $defaults));
    }
    

    【讨论】:

    • 我可以用一个虚拟的 getContent 函数(它只是 var_dumps 它的输入)来运行它。您是否收到任何错误、警告……或者该功能什么也没做?
    【解决方案2】:

    很遗憾,这是不可能的。您现在拥有的是传递article、display 等和$myStyle(应该是一个数组)。你会得到错误,因为你没有传递足够的参数。

    如果可以,检查getContent()是否有默认参数。

    【讨论】:

      【解决方案3】:

      您可以创建自己的函数,该函数只接受您需要的参数,并使用这些参数加上默认参数调用 getContent() 函数。并使用这个新函数而不是 getContent()

      编辑:

      你做这样的事情:

      <?php
      function myGetContent($param1,$param2,$param3,$param4,$param5,$param6){
        return getContent(
          $param1,
          $param2,
          $param3,
          $param4,
          $param5,
          $param6,
          "show:<div class='box box_stories'>",
          "show:<div class='box_pad box_img bwWrapper'>",
          "show:<div class='box_inner_pad'>",
          "show:<h3><a href='/staff-detail/__slug__'>__authorX__</a></h3>",
          "show:<p class='teamsummary'>__summary__</p>",
          "show:<p class='phone_icon'>__authorXworkphone__</p>",
          "show:</div>",
          "show:</div>",
          "show:</div>"
        );
      }
      

      然后你打电话:

      myGetContent(
          "article",
          "display:list",
          "find_series:team",
          "find_category:leadership-team",
          "order:series",
          "find_parent_category:team"
      );
      

      【讨论】:

      • 你能详细说明一下吗?我不确定如何将标准参数传递给getContent() 函数?好像我也面临同样的问题。
      • @Yazmat 你可能想用func_get_args() 概括一下。有人可能会这样复制它:P
      【解决方案4】:

      你需要这个吗?

      <?php
      
      getContent(
          array(
              'type'                  => 'article',
              'display'               => 'list',
              'find_series'           => 'team',
              'find_category'         => 'leadership-team',
              'order'                 => 'series',
              'find_parent_category'  => 'team'
          ),
          array(
              '<div class="box box_stories">',
              '<div class="box_pad box_img bwWrapper">',
              '<div class="box_inner_pad">',
              '<h3><a href="/staff-detail/__slug__">__authorX__</a></h3>',
              '<p class="teamsummary">__summary__</p>',
              '<p class="phone_icon">__authorXworkphone__</p>',
              '</div>',
              '</div>',
              '</div>'
          )
      );
      
      
      function getContent($argv, $shows){
          echo '<p>'.$argv['type'].'</p>';
          echo '<p>'.$argv['list'].'</p>';
          /* ... etc ... */
      
          echo '<pre>'.htmlspecialchars(print_r($argv, true), ENT_QUOTES).'</pre>';
          echo '<pre>'.htmlspecialchars(print_r($shows, true), ENT_QUOTES).'</pre>';
      }
      

      【讨论】:

      • 不幸的是,我无法更改 getContent 函数本身。它是 CMS 的核心部分。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      • 1970-01-01
      • 2016-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多