2016-07-31 137 views
0

如何为$matches参数创建一个全局变量preg_match如果提供参数,则创建一个全局变量

在以下代码中,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

您可以通过&作为变量的前缀使用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 
+0

如何检查是否'提供$ evens'与否? 'odd_numbers'可能会在有或没有'$ evens'的情况下被调用。 – akinuri

+0

您可以使用http://php.net/manual/en/function.func-num-args.php - 我会用示例更新答案 – rjdown

+0

好的,这似乎是个窍门。 – akinuri