你可以在一个范围内声明一个PHP变量吗?

时间:2011-11-01 20:57:08

标签: php function parameters scope

目标:在调用运行函数的函数范围内声明/设置变量。

详情:
嘿Overflowans,

我正在寻找将一个最后一小块糖添加到我在很多php函数中使用的实用程序中。它允许我在我的函数输入上定义一个灵活的契约。经过几次迭代,我已经把它缩小到一个看起来像这样的用法:

function doSomething($param_arr){
    FPX::contract(array(
        'required' => array("length", "width", "height", "weight"),
        'optional' => array("circumference")
    ));
    $length = $parr['length'];
    $width = $parr['width'];
    $height = $parr['height'];
    $weight = $parr['weight'];
    $circumference = $parr['circumference'];
    ....
}

FPX :: contract()自动获取$ param_arr并解析它以确保它与定义的合同兼容。

我现在想做的是不需要在之后声明每个变量。在最低的函数中,有没有一种方法可以在调用它的函数范围内声明变量?因此FPX :: contract()需要能够设置doSomething()范围内的变量,这样我就不必声明每个变量。 (我不想声明全局变量)。

理想情况下,它看起来像:

function doSomething($param_arr){
        FPX::contract(array(
            'required' => array("length", "width", "height", "weight"),
            'optional' => array("circumference")
        ));
    ....
}

然后doSomething()将能够访问合同中列出的每个变量$ length,$ width等。

我知道函数($ var0,$ var1,$ var2 = null)语法,但是这个语法与大量可选变量一起使用并不是很容易。

谢谢, 肯

3 个答案:

答案 0 :(得分:5)

也许你可以用extract()做点什么?

也就是说,只需让你的contract()返回一个数组或对数组的引用,然后解压缩()它。

答案 1 :(得分:4)

您可以执行类似

的操作
extract(FPX::contract(array(
        'required' => array("length", "width", "height", "weight"),
        'optional' => array("circumference")
    )));

它与你的想法略有不同,但结果应该是,你所期望的。

extract(array('foo'=>'bar'));
echo $foo;

http://php.net/extract

答案 2 :(得分:0)

它们必须是变量的集合而不是关联数组吗?

$parsedParams = FPX::contract(array(
    'required' => array("length", "width", "height", "weight"),
    'optional' => array("circumference")
  ),
  $param_arr
);

echo $parsedParams['length'];
echo $parsedParams['circumference'];