如何将函数中的一系列变量作为数组或不管它们的顺序传递?

时间:2010-11-08 04:46:38

标签: php

对不起,这听起来像个菜鸟问题。我想这样做,也许我的问题不明确。

我希望能够传递这样的内容:

make_thumbnail( array( 'width' => 60, 'height' => 40', 'title' => 'my image' ) );

现在上面的行调用已经生成缩略图的函数我没有问题,但我想要灵活性。我的意思是我的函数有这样的变量:

function make_thumbnail($title,$width,$height) {

the code..

echo ...

}

现在你得到了我想做的事情?我希望能够以任何顺序传递变量..它们不必具有相同的顺序标题,宽度,高度..我希望能够在模板中调用函数时指定顺序,因为我放入第一行。

我试图尽可能清楚地表达我的问题,但实际上找不到任何相关内容。

5 个答案:

答案 0 :(得分:5)

这种事情?

function make_thumbnail($myarray) {
$sometitle = $myarray["title"]
$somewidth = $myarray["width"]
$someheight = $myarray["height"]
}

答案 1 :(得分:2)

为什么不将数组作为函数参数? e.g。

function make_thumbnail($argsArray) {
  echo $argsArray['width'];
}

答案 2 :(得分:2)

您可以在函数中为每个参数创建变量

function make_thumbnail($argsArray) {  
  $width = $argsArray['width'];  
  $height = $argsArray['height'];  
  $title = $argsArray['title'];  

  // ...plug the rest of your original function here  
}

然后你的函数表现完全相同,除了你可以传入一个数组。

答案 3 :(得分:1)

您要求的是对PHP的Reflection语法的描述:

function callWithNamedParams( $funcName, array $args = null )
{
    if( is_null( $args ) ) return $funcName();
    $f = new ReflectionFunction($funcName);
    $input = array();
    foreach( $f->getParameters() as $param )
    {
        array_push( $input, @$args[ $param->getName() ] );
    }
    return call_user_func_array( $funcName, $input );
}

使用:

function myFunc( $foo, $bar )
{
    echo "foo = $foo;  Bar = $bar";
}

callWithNamedParams( "myFunc", array( "bar"=>1, "foo"=>2 ) );

您应该将foo = 2; Bar = 1作为输出。

答案 4 :(得分:0)

您需要定义逻辑以将任何参数作为您想要的参数。数组是你可以使用的最好的东西。但是更改参数会更改签名。 你有点实现多态,但方式错误..