如果提供参数,则创建全局变量

时间:2016-07-31 22:52:54

标签: php global-variables preg-match

如何按preg_match$matches参数的方式创建全局变量?

在以下代码中,preg_match创建全局$Hel_matches$Wor_matches变量,即使它们未定义。

$string = "Hello, World!";

$pattern1 = '/Hel/';
$pattern2 = '/Wor/';

preg_match($pattern1, $string, $Hel_matches);
preg_match($pattern2, $string, $Wor_matches);

print_r($Hel_matches);
print_r($Wor_matches);

我希望能够做同样的事情。

例如,odd_numbers()会返回一个填充了0$max之间奇数的数组。

function odd_numbers($max) {
    $numbers = [];
    for ($i = 0; $i <= $max; $i++) {
        if ($i % 2 == 1) {
            $numbers[] = $i;
        }
    }
    return $numbers;
}

$odd_numbers = odd_numbers(10);
print_r($odd_numbers);

如果我想在odd_numbers()中做一些额外的计算并且还要返回(例如用于调试目的),那么我不能。我只能回报一件事。所以,相反,我将第二个参数(变量)传递给odd_numbers(),函数返回/将返回值赋给该变量。

// $odd_numbers = odd_numbers(10, $evens); // fill $evens (if provided) with even numbers for debug purposes
print_r($odd_numbers);
// print_r($evens); // debug

1 个答案:

答案 0 :(得分:1)

您可以使用&前缀变量前缀reference

function odd_numbers($max, &$evens = array()) {
    // blah
    $numbers = array(1, 3, 5);

    if (func_num_args() == 2) {
        $evens = array(2, 4, 6);
    }

    return $numbers;
}

$odd_numbers = odd_numbers(10, $evens);
var_dump($evens);

输出:

array (size=3)
  0 => int 2
  1 => int 4
  2 => int 6