2012-08-02 111 views
1

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

下面是完整的参数的函数调用的例子:

<? 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

回答

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)); 
} 
+0

不幸的是,即使这是行不通的。我没有输出。 – shshaw 2012-08-02 19:39:54

+0

我能够像这样用一个虚拟的'getContent'函数来运行它(它只是var_dumps它的输入)。你有没有得到任何错误,警告......或者这个功能什么都不做? – Vatev 2012-08-02 19:44:04

+0

提供的编辑完美。谢谢! – shshaw 2012-08-02 19:46:08

1

核心功能不幸的是,这是不可能的。你现在有什么是通过article,display等和$myStyle(这应该是一个数组)。你会得到错误,因为你没有传递足够的论据。

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

1

您可以创建你自己的函数,只需要你所需要的参数和调用这些参数加上默认之一的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" 
); 
+0

你能再细说一下吗?我不确定如何将标准参数传递给'getContent()'函数?好像我面临同样的问题。 – shshaw 2012-08-02 19:18:53

+0

我编辑我用一个例子 – Oussama 2012-08-02 19:25:25

+0

响应@Yazmat你可能要概括与'func_get_args()'。有人可能会复制这样的:P – Vatev 2012-08-02 19:25:57

0

你需要这个?

<?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>'; 
} 
+0

不幸的是我无法改变的'getContent'功能本身。这是CMS的核心部分。 – shshaw 2012-08-02 19:36:54

相关问题