2 возврата в одну функцию - PullRequest
       9

2 возврата в одну функцию

3 голосов
/ 28 декабря 2011

Я хотел бы вернуть 2 разных значения с помощью одной функции. Это мои функции:

function example1 ($a) {
    return $result1;
    return $result2;
}

function example2 ($edit, $account, $value) {
    $config ($edit);
}

Вот так я получаю $result1 в моей $config -вариаторе. Но что мне нужно сделать, чтобы получить оба возвращаемых значения в моей example1 -функции?

Ответы [ 9 ]

4 голосов
/ 28 декабря 2011

Это, вероятно, самый чистый способ сделать это:

function example1($a)
{
    return array($result1, $result2)
}

// get both values
list($config1, $config2) = example1($a);

Это составит $config = $result1 и $config2 = $result2.

3 голосов
/ 28 декабря 2011

Вы не можете вернуть 2 переменные в одной функции, вместо этого вы должны вернуть массив:

function example1 ($a) {
    $result[0] = 'something';
    $result[1] = 'something else';
    return $result;
}
1 голос
/ 28 декабря 2011

Несколько решений:

  1. Использование массивов: return array($result1, $result2); Затем можно использовать list($config1, $config2) = $returned;, чтобы получить оба значения, назначенные для 2 переменных.

  2. Использовать ссылки.

    function example_1($a, &$result2) {
      $result2 = 'whatever';
      return $result1;
    }
    
    // $config1 will contain $result1
    // $config2 will contain $result2 ('whatever' in this case)
    $config1 = example_1($a, $config_2);
    
1 голос
/ 28 декабря 2011

Вам просто нужно поместить результаты в массив, а затем вернуть указанный массив

function example1 ($a) {
    $array = array();
    $array[0] = $result1;
    $array[1] = $result2;
    return $array;
    }
1 голос
/ 28 декабря 2011

использовать ассоциативный массив или stdClass в качестве возвращаемой переменной.

function example1 ($a) {
    return array("result_1" => $result1 , "result_2" => $result2 );
}

И получать значения там, где это необходимо.

$answer = example1($a);
$firstResult = $answer["result_1"];
$secondResult = $answer["result_2"];

Обратите внимание, что это не будет работать:

 $firstResult = example1($a)["result_1"] ;

и выдаст синтаксическую ошибку из-за недостатка в PHP. Следовательно, сначала присвойте массив, а затем получите значения.

1 голос
/ 28 декабря 2011

Php не допускает многократного возврата из одной и той же функции (как, например, делает python), поэтому, если вы хотите сделать это, вы должны либо вернуть массив, объект, либо повторить свою логику.

Или переделайте свою логику, чтобы вернуть массив объектов.

0 голосов
/ 28 декабря 2011

Возвращаемый массив:

function example1 ($a) {
    return array($result1, $result2);
}

И использовать список для его получения:

list($a, $b) = example1('something');
0 голосов
/ 28 декабря 2011

Невозможно сделать более одного возврата в одной функции или методе.Но у вас есть возможность вернуть массив с несколькими значениями:

function example1 ($a) {
    return array('top' => $result1, 'left' => $result2);
}

Теперь вы можете получить доступ к двум значениям:

$result = example1($a);
echo $result['top'] . ' x ' . $result['left'];
0 голосов
/ 28 декабря 2011

Вы можете использовать параметры передачи по ссылке:

function example(&$result1, &$result2) {
  $result1 = 'a';
  $result2 = 123;
}

example($a, $b);
echo "$a, $b";
...