2016-07-31 3 views
0

Как создать глобальную переменную, как 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

Вы можете использовать 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